<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Security &#8211; Blackbams Blog</title>
	<atom:link href="https://blog.blackbam.at/de/category/web-development/security/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.blackbam.at/de</link>
	<description>development - digital arts - internet</description>
	<lastBuildDate>Wed, 05 Oct 2011 17:48:48 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>
	<item>
		<title>Google Hacks</title>
		<link>https://blog.blackbam.at/de/2010/06/24/google-hacks/</link>
					<comments>https://blog.blackbam.at/de/2010/06/24/google-hacks/#comments</comments>
		
		<dc:creator><![CDATA[Blackbam]]></dc:creator>
		<pubDate>Thu, 24 Jun 2010 01:30:07 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Suchmaschiene]]></category>
		<guid isPermaLink="false">http://www.blackbam.at/blog/?p=688</guid>

					<description><![CDATA[Some useful keywords for the Google search (from a .pdf of Debasis Mohanty): Below discussed are various Google’s special commands and I shall be explaining each command in brief and will show how it can be used for critical information digging. [ intitle: ] The “intitle:” syntax helps Google restrict the search results to pages [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Some useful keywords for the Google search (from a .pdf of Debasis Mohanty):</p>
<p>Below discussed are various Google’s special commands and I shall be explaining each command in<br />
 brief and will show how it can be used for critical information digging.</p>
<p><br class="spacer_" /></p>
<p><span style="color: #ffff00;">[ intitle: ]</span><br />
 The “intitle:” syntax helps Google restrict the search results to pages containing that word in the title. For<br />
 example, “intitle: login password” (without quotes) will return links to those pages that has the word<br />
 &#8222;login&#8220; in their title, and the word &#8222;password&#8220; anywhere in the page.<br />
 Similarly, if one has to query for more than one word in the page title then in that case “allintitle:” can be<br />
 used instead of “intitle” to get the list of pages containing all those words in its title. For example using<br />
 “intitle: login intitle: password” is same as querying “allintitle: login password”.</p>
<p><br class="spacer_" /></p>
<p><span style="color: #ffff00;">[ inurl: ]</span><br />
 The “inurl:” syntax restricts the search results to those URLs containing the search keyword. For<br />
 example: “inurl: passwd” (without quotes) will return only links to those pages that have &#8222;passwd&#8220; in the<br />
 URL.<br />
 Similarly, if one has to query for more than one word in an URL then in that case “allinurl:” can be used<br />
 instead of “inurl” to get the list of URLs containing all those search keywords in it. For example: “allinurl:<br />
 etc/passwd“ will look for the URLs containing “etc” and “passwd”. The slash (“/”) between the words will<br />
 be ignored by Google.</p>
<p><br class="spacer_" /></p>
<p><span style="color: #ffff00;">[ site: ]</span><br />
 The “site:” syntax restricts Google to query for certain keywords in a particular site or domain. For<br />
 example: “exploits site:hackingspirits.com” (without quotes) will look for the keyword “exploits” in those<br />
 pages present in all the links of the domain “hackingspirits.com”. There should not be any space between<br />
 “site:” and the “domain name”.</p>
<p><br class="spacer_" /></p>
<p><span style="color: #ffff00;">[ filetype: ]</span><br />
 This “filetype:” syntax restricts Google search for files on internet with particular extensions (i.e. doc, pdf<br />
 or ppt etc). For example: “filetype:doc site:gov confidential” (without quotes) will look for files with “.doc”<br />
 extension in all government domains with “.gov” extension and containing the word “confidential” either in<br />
 the pages or in the “.doc” file. i.e. the result will contain the links to all confidential word document files on<br />
 the government sites.</p>
<p><br class="spacer_" /></p>
<p><span style="color: #ffff00;">[ link: ]</span><br />
 “link:” syntax will list down webpages that have links to the specified webpage. For Example:<br />
 “link:www.securityfocus.com” will list webpages that have links pointing to the SecurityFocus homepage.<br />
 Note there can be no space between the &#8222;link:&#8220; and the web page url.</p>
<p><br class="spacer_" /></p>
<p><span style="color: #ffff00;">[ related: ]</span><br />
 The “related:” will list web pages that are &#8222;similar&#8220; to a specified web page. For Example:<br />
 “related:www.securityfocus.com” will list web pages that are similar to the Securityfocus homepage. Note<br />
 there can be no space between the &#8222;related:&#8220; and the web page url.</p>
<p><br class="spacer_" /></p>
<p><span style="color: #ffff00;">[ cache: ]</span><br />
 The query “cache:” will show the version of the web page that Google has in its cache. For Example:<br />
 “cache:www.hackingspirits.com” will show Google&#8217;s cache of the Google homepage. Note there can be<br />
 no space between the &#8222;cache:&#8220; and the web page url.<br />
 If you include other words in the query, Google will highlight those words within the cached document. For<br />
 Example: “cache:www.hackingspirits.com guest” will show the cached content with the word &#8222;guest&#8220;<br />
 highlighted.</p>
<p><br class="spacer_" /></p>
<p><span style="color: #ffff00;">[ intext: ]</span><br />
 The “intext:” syntax searches for words in a particular website. It ignores links or URLs and page titles.<br />
 For example: “intext:exploits” (without quotes) will return only links to those web pages that has the<br />
 search keyword &#8222;exploits&#8220; in its webpage.</p>
<p><br class="spacer_" /></p>
<p><span style="color: #ffff00;">[ phonebook: ]</span><br />
 “phonebook” searches for U.S. street address and phone number information. For Example:<br />
 “phonebook:Lisa+CA” will list down all names of person having “Lisa” in their names and located in<br />
 “California (CA)”. This can be used as a great tool for hackers incase someone want to do dig personal<br />
 information for social engineering.</p>
<p><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fblog.blackbam.at%2Fde%2F2010%2F06%2F24%2Fgoogle-hacks%2F&#038;title=Google%20Hacks" data-a2a-url="https://blog.blackbam.at/de/2010/06/24/google-hacks/" data-a2a-title="Google Hacks"><img src="https://static.addtoany.com/buttons/share_save_120_16.png" alt="Share"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.blackbam.at/de/2010/06/24/google-hacks/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Session-Sicherheit in PHP</title>
		<link>https://blog.blackbam.at/de/2010/01/26/session-sicherheit-in-php/</link>
					<comments>https://blog.blackbam.at/de/2010/01/26/session-sicherheit-in-php/#comments</comments>
		
		<dc:creator><![CDATA[Blackbam]]></dc:creator>
		<pubDate>Tue, 26 Jan 2010 17:25:17 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Cookies]]></category>
		<category><![CDATA[Proxies]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[SESSID]]></category>
		<category><![CDATA[Session]]></category>
		<category><![CDATA[Session-ID]]></category>
		<category><![CDATA[Sessions]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Skript]]></category>
		<category><![CDATA[Snippet]]></category>
		<guid isPermaLink="false">http://www.blackbam.at/blog/?p=468</guid>

					<description><![CDATA[Weil ich mich ein Weilchen damit beschäftigt habe, ein kleines Tutorial zum erhöhen der Session-Sicherheit in PHP. Nur um Missverständnissen vorzubeugen, ein kleiner Hinweis: Sichere Sessions machen noch lange kein sicheres PHP-Skript und ein sicheres PHP-Skript gewährt noch lange keine sichere Webanwendung. Außerdem sollte man keinen Code 1:1 aus dem Internet verwenden 😉 Ausgangssituation Bei [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><p>
	Weil ich mich ein Weilchen damit beschäftigt habe, ein kleines Tutorial zum erhöhen der Session-Sicherheit in PHP. Nur um Missverständnissen vorzubeugen, ein kleiner Hinweis: Sichere Sessions machen noch lange kein sicheres PHP-Skript und ein sicheres PHP-Skript gewährt noch lange keine sichere Webanwendung. Außerdem sollte man keinen Code 1:1 aus dem Internet verwenden 😉
</p>
<h3>
	Ausgangssituation<br />
</h3>
<p>
	Bei PHP wird traditionell bzw. aus Kompatibilitäts- und Bequemlichkeitsgründen mit vielen Sicherheits-relevanten Problemstellungen eher fahrlässig umgegangen. Dabei stellen Sessions keine Ausnahme dar. Eine Session in PHP wird benötigt, um einen Client gegenüber einem Webserver zu authentifizieren. Da HTTP ein zustandsloses Protokoll ist, wird dies in PHP über Session-IDs realisiert. Eine Session-ID wird beim Start einer Session generiert, der Client schleppt sie dann mit sich herum und sendet sie bei Anfragen an den Webserver auf irgendeine Art und Weise mit (in der URL, als verstecktes &lt;input&gt;-Feld oder als Cookie im Header). Der Webserver wiederum schaut nach, ob er die entsprechende Session-ID in seinem Datei-Sortiment gespeichert hat (PHP speichert die Sesson-IDs in Klartext), wenn das nicht der Fall ist, wird schlicht und einfach eine neue Session erzeugt.
</p>
<h3>
	Der &#8222;Hacker&#8220;<br />
</h3>
<p>
	Der Hacker hat nun zum Ziel, sich solch Session-ID eines Users zu schnappen und selbst zu verwenden, um sich als dieser ausgeben zu können und entsprechend mit dessen Rechten agieren zu können. Ist es ihm erst einmal gelungen, an eine Session-ID zu kommen, ist das nicht mehr weiter schwer, diese zu verwenden, wie sich z.B. sehr schön mit dem Firefox-Addon Tamper-Data zeigen lässt. Mit diesem lassen sich beliebig POST-Parameter, Header-Daten und somit auch Cookies beliebig modifizieren. <br />
	 
</p>
<p>
	 
</p>
<div style="text-align: center;">
	<a href="https://blog.blackbam.at/wp-content/uploads/2010/01/Tamper.jpg"><img fetchpriority="high" decoding="async" alt="Demonstration Tamper Data" class="aligncenter size-full wp-image-472" height="310" src="https://blog.blackbam.at/wp-content/uploads/2010/01/Tamper.jpg" title="Tamper" width="600" srcset="https://blog.blackbam.at/wp-content/uploads/2010/01/Tamper.jpg 600w, https://blog.blackbam.at/wp-content/uploads/2010/01/Tamper-300x155.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /></a>
</div>
<p>
	 
</p>
<p>
	<br />
	Um an die Session-ID zu kommen gibt es für den Hacker diverse Möglichkeiten und im Prinzip ist alles, was durch das Internet gesendet wird, (mit den entsprechenden Fähigkeiten) abhörbar.<br />
	 
</p>
<h3>
	Lösungsversuche<br />
</h3>
<p>
	Das folgende Skript probiert bestimmten, kritischen Problemen im Session-Handling entgegenzuwirken<br />
	 
</p>
<table class="dividetable">
<tbody>
<tr>
<th>
				Problem
			</th>
<th>
				Gegenmaßnahme
			</th>
</tr>
<tr>
<td>
				Session-ID als einziges Mittel zur Identifizierung eines Clients
			</td>
<td>
				Zusätzliche Gegenprüfung der Client-IP und eines evtl. verwendeten Proxies
			</td>
</tr>
<tr>
<td>
				Nachvollziehbarkeit der Session-ID
			</td>
<td>
				Erzeugung einer sicheren, nicht rückrechenbaren Session-ID, weitere Schutzmaßnahmen
			</td>
</tr>
<tr>
<td>
				Lebende Sessions die nicht mehr gültig sein sollten
			</td>
<td>
				Absolute Zerstörung der Session und des Cookies im Problemfall
			</td>
</tr>
</tbody>
</table>
<p>
	<br />
	 
</p>
<pre lang="php">### wird immer anstatt session_start(); aufgerufen
function startSession() {

	session_start();

	// Falls eine Session existiert, dann muss es auch eine Client_ip geben
	if(filter_var($_SESSION["client_ip"])) {

		// Wenn es bereits eine Session gibt
		if(getSessionClientIP() == $_SESSION["client_ip"]) {
			return;
		} else {
			destroy_session_absolute();
			header("Location: illegal_action.php");
			die;
		}

	} else {

		// falls eine neue Session erzeugt werden muss, dann machen wir das nochmal gscheid
		destroy_session_absolute();
		session_regenerate_save_id();
		session_start();
		setSessionClientIP();
	}
}

### neue, sichere SESSID generieren, MUSS VOR session_start() aufgerufen werden
function session_regenerate_save_id() {
	$hash_time = md5(microtime());
	$hash_ip = md5($_SERVER["REMOTE_ADDR"]);
	$hash_space = sha1(disk_free_space("/"));
	$session_id = sha1($hash_time.$hash_ip.$hash_space);
	session_id($session_id);
}

### speichert die Client-Adresse je nach Typ als md5-Hash in die Session
function setSessionClientIP() {

	if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
		$_SESSION["client_ip"] = md5($_SERVER["HTTP_X_FORWARDED_FOR"]);
	} else {
		$_SESSION["client_ip"] = md5($_SERVER["REMOTE_ADDR"]);
	}	

}

### liefert die Client-Adresse entsprechend dem vorher angesprochenen Mechanismus zurück
function getSessionClientIP() {

	if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
		return md5($_SERVER["HTTP_X_FORWARDED_FOR"]);
	} else {
		return md5($_SERVER["REMOTE_ADDR"]);
	}	

}

### sichere Zerstörung einer Session
function destroy_session_absolute() {
	if(isset($_COOKIE[session_name()])) {
		setcookie(session_name(),"",time()-42000,"/");
	}
	session_destroy();
}
</pre>
<p>
	<br />
	 
</p>
<h4>
	Verwendung des Skripts<br />
</h4>
<ul style="padding: 20px;">
<li>
		Jede Session mit startSession(); anstatt session_start(); aufrufen
	</li>
<li>
		vor jeder kritischen Operation session_regenerate_id(); einsetzen und zwar vor startSession();
	</li>
</ul>
<h4>
<p>	Erklärung des Skripts<br />
</h4>
<p>
	bzgl. Gegenprüfung der Client-IP bzw. deren Grenzen (Einsatz eines hochanonymen Proxies vom Client)<br />
	 
</p>
<table class="dividetable">
<tbody>
<tr>
<th>
				PHP-Server-Variable
			</th>
<th>
				Standard
			</th>
<th>
				Normaler Proxy
			</th>
<th>
				Anonymer Proxy
			</th>
<th>
				Hochanonymer Proxy
			</th>
<th>
				Erklärung
			</th>
</tr>
<tr>
<td>
				$_SERVER[&#8222;HTTP_VIA&#8220;]
			</td>
<td>
				nein
			</td>
<td>
				ja, proxy ip
			</td>
<td>
				ja, proxy ip
			</td>
<td>
				nein
			</td>
<td>
				Weiterleitungs-IP
			</td>
</tr>
<tr>
<td>
				$_SERVER[&#8222;REMOTE_ADDR&#8220;]
			</td>
<td>
				ja, echte
			</td>
<td>
				ja, proxy ip
			</td>
<td>
				ja, proxy ip
			</td>
<td>
				ja,proxy ip
			</td>
<td>
				Offizielle-IP
			</td>
</tr>
<tr>
<td>
				$_SERVER[&#8222;HTTP_X_FORWARDED_FOR&#8220;]
			</td>
<td>
				nein
			</td>
<td>
				ja, richtige
			</td>
<td>
				ja, proxy/random
			</td>
<td>
				nein
			</td>
<td>
				Ursprungs-IP
			</td>
</tr>
</tbody>
</table>
<p>
	 
</p>
<h4>
	Erweiterungsmöglichkeiten für das Skript<br />
</h4>
<p>
	Entsprechend dem Schema &#8222;Gegenprüfung der Client-IP&#8220;, welches in diesem Script verwendet wird, können weitere Mittel eingesetzt werden, um einen Client möglichst eindeutig identifizieren zu können. So beispielsweise der Vorschlag von phpforum.de:
</p>
<pre lang="php">// zuverlässig
$_SERVER["DOCUMENT_ROOT"]
$_SERVER["HTTP_USER_AGENT"] // kann leer sein, dann aber zuverlässig leer
// eine eindeutige Kennung vielfältig als "salt" einsetzbar
define("APPLICATION_ID","w3463-dfgsdgd-564564")

// weniger zuverlässig
$_SERVER["REMOTE_ADDR"] // oder nur Teile davon
$_SERVER["HTTP_ACCEPT_LANGUAGE"]
$_SERVER["HTTP_ACCEPT_CHARSET"]
$_SERVER["HTTP_ACCEPT_ENCODING"]
$_SERVER["HTTP_ACCEPT"]
</pre>
<p>
	(aus <a href="http://www.phpforum.de/forum/showthread.php?t=216531">Session-Sicherheit auf phpforum.de</a>)
</p>
<p>
	 
</p>
<p>
	Hat man dann vermeintlich genug identifizierendes Material über den Benutzer gesammelt (natürlich sollte man sich hierbei <em>nur auf Daten verlassen, die während der gesamten Session eindeutig sein sollten, damit man nicht seine Benutzer durch ständigen Logout verärgert </em>), speichert man es in gehashten Variablen (mit möglichst unauffälligen Namen), die bei startSession(); gegengeprüft werden. Nützlich ist möglicherweise auch ein <a href="http://php.net/manual/de/reserved.variables.server.php">Überblick über alle $_SERVER-Variablen im PHP-Manual</a>.
</p>
<p>
	 
</p>
<p>
	Man kann dies auch beispielsweise auch über den sogenannten &#8222;User-Fingerprint-Array&#8220; realisieren. Dazu sammelt man in einem Array erstmal Daten über den Benutzer und bildet darüber einen Hash-Wert.
</p>
<pre lang="php">
$fingerprintArray = array($_SERVER['HTTP_USER_AGENT'],substr($_SERVER["REMOTE_ADDR"],0,7),...);
$fingerprint = md5(serialize($fingerprintArray)); .
</pre>
<p>
	Dazu und ebenfalls zu dem Thema gibt es <a href="http://www.mathias-bank.de/2008/02/22/php-sicherheit-session-fixierung/">hier</a> ebenfalls eine Diskussion.
</p>
<h4>
	Weitere Sicherheitsmaßnahmen<br />
</h4>
<ul style="padding: 0px 15px;">
<li>
		Nur Cookies zur Übertragung der SessionID erlauben
	</li>
</ul>
<pre lang="php">
ini_set("session.use_cookies" ,1); // sicherlich!!
ini_set("session.use_only_cookies",1); // JA! Ohne Cookies geht hier nix!!
ini_set("session.use_trans_sid" ,0); // bloss nicht auf 1 setzen session_start();
</pre>
<ul style="padding: 0pt 15px;">
<li>
		sensitive Daten nur direkt zum Server übertragen und niemals in einer Session speichern
	</li>
<li>
		Verwendung von SSL
	</li>
<li>
		wenn es die Sicherheit erfordert, sei zusätzlich zu einem TAN-System geraten
	</li>
<li>
		Sicherstellen, dass bei Shared-Hosting kein &#8222;Server-Nachbar&#8220; auf den Ordner mit den Session-IDs zugreifen kann
	</li>
</ul>
<p>
	 
</p>
<p>
	Ich hoffe das dieses Tutorial den Leser ein Stück weitergebracht hat. Es ist, wie gesagt, nur ein kleines Stück Sicherheit und keinesfalls sollte man sich damit in Sicherheit wiegen.
</p>
<p>
	<br />
	Als weiterführende Literatur ist das Buch &#8222;Sichere Webanwendungen in PHP&#8220; von Tobias Wassermann zu empfehlen, aus welchem ein Großteil meines Wissens für dieses Tutorial stammt. Ebenfalls &#8222;PHP-Sicherheit&#8220; von Christopher Kunz und Stefan Esser ist den ein oder anderen Blick wert.
</p>
<p>
	 
</p>
<p>
	Weiterführende Informationen: Beschwerden, Bugs, Fehler oder gar Lob bitte unbedingt als Kommentar hinterlassen 🙂</p></p>
<p><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fblog.blackbam.at%2Fde%2F2010%2F01%2F26%2Fsession-sicherheit-in-php%2F&#038;title=Session-Sicherheit%20in%20PHP" data-a2a-url="https://blog.blackbam.at/de/2010/01/26/session-sicherheit-in-php/" data-a2a-title="Session-Sicherheit in PHP"><img src="https://static.addtoany.com/buttons/share_save_120_16.png" alt="Share"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.blackbam.at/de/2010/01/26/session-sicherheit-in-php/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
