<?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>infogurke.de &#187; PHP</title>
	<atom:link href="http://www.infogurke.de/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.infogurke.de</link>
	<description>Der Informant aus dem Netz</description>
	<lastBuildDate>Thu, 07 Apr 2011 08:04:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Never trust user input &#8211; PHP Fehler Nr. 1</title>
		<link>http://www.infogurke.de/2009/02/never-trust-user-input-php-fehler-nr-1/</link>
		<comments>http://www.infogurke.de/2009/02/never-trust-user-input-php-fehler-nr-1/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 20:19:03 +0000</pubDate>
		<dc:creator>infogurke</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[remote file inclusion]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.infogurke.de/?p=293</guid>
		<description><![CDATA[&#60;?php readfile(ROOT_DIR . "/" . $_GET["file"]); ?&#62; Wer kennt diese Zeilen nicht? Jeder der sich einmal mit PHP besch&#228;ftigt hat wird bei diesen Zeile schnell aufmerksam. Meistens findet man diese drei Zeilen in einer download.php, navigation.php oder image.php. In der Website steht dann &#60;a href=&#8221;/download.php?file=/files/antrag-02-2009.pdf&#8221;&#62;Antrag Februar 2009&#60;/a&#62; oder als Bild &#60;img src=&#8221;/img.php?file=/images/thumbnails/01.jpg&#8221; /&#62;. Doch der [...]]]></description>
			<content:encoded><![CDATA[<p><code>&lt;?php<br />
readfile(ROOT_DIR . "/" . $_GET["file"]);<br />
?&gt;<br />
</code></p>
<p>Wer kennt diese Zeilen nicht? Jeder der sich einmal mit PHP besch&#228;ftigt hat wird bei diesen Zeile schnell aufmerksam. Meistens findet man diese drei Zeilen in einer download.php, navigation.php oder image.php.</p>
<p>In der Website steht dann &lt;a href=&#8221;/download.php?file=/files/antrag-02-2009.pdf&#8221;&gt;Antrag Februar 2009&lt;/a&gt; oder als Bild &lt;img src=&#8221;/img.php?file=/images/thumbnails/01.jpg&#8221; /&gt;.</p>
<p>Doch der Programmier hat hier eine der wichtigsten Regeln nicht beachtet:</p>
<p><strong>Never trust user input</strong></p>
<p>Jede Benutzereingabe ist evil und muss &#252;berpr&#252;ft werden. Wenn man solche Scripte in freie Wildbahn findet, kann man nur hoffen, dass der Programmierer lediglich ein Hobby-Projekt betreut(e).</p>
<p>Ein $Script-Kiddie w&#252;rde diese Adresse etwas ver&#228;ndern und darauf hoffen, dass ein Amateur am Werk war:</p>
<p>/download.php?file=index.php</p>
<p>W&#252;rde bei unserem Beispiel die index.php als Quellcode ausliefern. Prinzipiell l&#228;sst sich damit jede Datei aufrufen, auf die PHP zugreifen kann. Bei einem schlecht konfigurierten Server ist so unter Umst&#228;nden schnell der ganze Server betroffen. Letzters traf vor einigen Jahren auch den Sat. 1 &#8220;Computer- und Internetexperten&#8221; <a href="http://de.wikipedia.org/wiki/Peter_Huth_(Computerjournalist)">Peter Huth</a>; nach einem Bericht auf Heise wurde der Server kompromittiert.</p>
<p>Noch schlimmer w&#228;re es &#252;brigens, wenn man readfile() durch include() ersetzt. Damit w&#252;rde eine PHP-Datei von einem fremden Server geladen und ausgef&#252;hrt. Damit k&#246;nnte man seine eigene Scripte auf dem Server ausf&#252;hren! Bei einem guten Hoster ist man davor jedoch gesch&#252;tzt, bzw. man setzt selbst ini_set(&#8220;allow_url_include&#8221;, false) in seiner Anwendung.</p>
<p>Bei Google findet man mit einfachen Abfragen direkt etliche Kandidaten mit dieser <span style="text-decoration: line-through;">Sicherheitsl&#252;cke</span> Einladung.</p>
<p>Zum Schlu&#223; hab ich noch einen <a href="http://www.phpro.org/tutorials/PHP-Security.html">Link</a> zu einem kurzen Tutorial rausgesucht.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infogurke.de/2009/02/never-trust-user-input-php-fehler-nr-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Umfrage-Tool und IP-Sperre</title>
		<link>http://www.infogurke.de/2008/03/umfrage-tool-und-ip-sperre/</link>
		<comments>http://www.infogurke.de/2008/03/umfrage-tool-und-ip-sperre/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 17:00:30 +0000</pubDate>
		<dc:creator>infogurke</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[ip sperre]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[umfrage]]></category>

		<guid isPermaLink="false">http://blog.rumtun.de/2008/03/umfrage-tool-und-ip-sperre/</guid>
		<description><![CDATA[Ich hab in der letzten Woche ein kleines Umfrage-Tool geschrieben. Damit jemand nur einmal abstimmen kann, setze ich neben einem Cookie auch noch auf eine IP-Sperre. Generell ist eine IP-Sperre aber problematisch, viele Firmen haben einen Internetanschlu&#223; mit mehreren Users. Der Router macht NAT und die x User gehen &#252;ber eine &#246;ffentliche IP ins Internet. [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hab in der letzten Woche ein kleines Umfrage-Tool geschrieben. Damit jemand nur einmal abstimmen kann, setze ich neben einem Cookie auch noch auf eine IP-Sperre.</p>
<p>Generell ist eine IP-Sperre aber problematisch, viele Firmen haben einen Internetanschlu&#223; mit mehreren Users. Der Router macht NAT und die x User gehen &#252;ber eine &#246;ffentliche IP ins Internet. Aus so einem Netz k&#246;nnte man nat&#252;rlich auch nur einmal abstimmen. Auf der anderen Seite gibt es Internetprovider, die ihre User &#252;ber Zwangsproxies leiten, damit kann es sein, dass zwei Requests von einem User, die wenigen Sekunden auseinander liegen, von verschiedenen IPs kommen. AOL setzt oder setzte auf einen Zwangsproxy.</p>
<p>Bei dem Umfrage-Tool nutze ich veschiedene Faktoren, damit ich eine doppelte Abstimmung verhindern kann. Wie schon geschrieben ist ein Faktor die IP-Adresse, f&#252;r das Testen der IP-Sperre habe ich ein kleines Script in PHP5 geschrieben, das automatisch Verbindungen &#252;ber einen &#246;ffentliche Proxy-Server herstellt.</p>
<p><span id="more-13"></span>Das Script l&#228;dt zuerst einen RSS-Feed mit einer Liste von Proxy-Servern und speichert diese in einer Textdatei, ganz hilfreich f&#252;r Debug-Zwecke. Der RSS-Feed wird von xroxy.com bereitgestellt.</p>
<p>Danach ruft das Script &#252;ber alle Proxy-Server die URL des Umfrage-Tools auf, dabei wird nach dem Zufallsprinzip ein User-Agent ausgew&#228;hlt. Sehr leicht l&#228;sst sich auch ein HTTP-Referer mitsenden, mit ein bisschen mehr Arbeit k&#246;nnen auch Cookies ausgelesen und dann mitgesendet werden.</p>
<p>Bei dem Script nutze ich die Snoopy-Klasse, die solltest du ziemlich leicht &#252;ber Google finden.</p>
<p>Mit dem Script solltet ihr eure eigenen Umfrage-Tools ziemlich leicht testen k&#246;nnen, das Script findest du hier:<br />
<a href="http://blog.rumtun.de/wp-content/uploads/2008/03/umfrage-test.txt" title="PHP-Script um mit Hilfe von Proxy-Servern eine IP-Sperre umgehen zu k&#246;nnen">PHP-Script um mit Hilfe von Proxy-Servern eine IP-Sperre umgehen zu k&#246;nnen</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infogurke.de/2008/03/umfrage-tool-und-ip-sperre/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

