<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>axel_pl blog</title>
	<atom:link href="http://axelpl.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://axelpl.wordpress.com</link>
	<description>ideveloper</description>
	<lastBuildDate>Wed, 02 Jan 2008 18:11:11 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='axelpl.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/dabde6bb2c878de1cf41b4ab9d22d803?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>axel_pl blog</title>
		<link>http://axelpl.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://axelpl.wordpress.com/osd.xml" title="axel_pl blog" />
		<item>
		<title>Uniwersalne zabezpieczenie przed SQL Injection i XSS?</title>
		<link>http://axelpl.wordpress.com/2008/01/01/uniwersalne-zabezpieczenie-przed-sql-injection-i-xss/</link>
		<comments>http://axelpl.wordpress.com/2008/01/01/uniwersalne-zabezpieczenie-przed-sql-injection-i-xss/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 11:09:01 +0000</pubDate>
		<dc:creator>axelpl</dc:creator>
				<category><![CDATA[Bezpieczeństwo]]></category>
		<category><![CDATA[axel_pl]]></category>
		<category><![CDATA[injection]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://axelpl.wordpress.com/2008/01/01/uniwersalne-zabezpieczenie-przed-sql-injection-i-xss/</guid>
		<description><![CDATA[Witajcie.
Tak sobie ostatnio myślałem nad uniwersalnym zabezpieczeniem przed tego typu atakami bez większej modyfikacji całego kodu. Wpadłem na coś takiego co w dużej mierze powinno znacznie zabezpieczyć witrynę. Jest tylko jeden warunek, najlepiej by było jak by strona z tym kodem została dołączona do każdej podstrony.
Na samym początku przydało by się wykluczyć dopisywanie do zapytań [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=axelpl.wordpress.com&blog=2423696&post=3&subd=axelpl&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Witajcie.<br />
Tak sobie ostatnio myślałem nad uniwersalnym zabezpieczeniem przed tego typu atakami bez większej modyfikacji całego kodu. Wpadłem na coś takiego co w dużej mierze powinno znacznie zabezpieczyć witrynę. Jest tylko <b>jeden </b>warunek, najlepiej by było jak by strona z tym kodem została dołączona do każdej podstrony.</p>
<p>Na samym początku przydało by się wykluczyć dopisywanie do zapytań takich ciągów typu <i>UNION, SELECT</i> niby funkcja <b>preg_match </b>powinna wykluczyć te słowa, ale co wtedy gdy ktoś użyje zapisu typu U%4EIO%4E <i>&lt;==&gt; UNION </i>a no właśnie to mamy lipę.<br />
<span id="more-3"></span><br />
Pozwoliłem sobie napisać taką funkcję:</p>
<blockquote><p>    &lt;?</p>
<p>function hexalert($string) {<br />
$string2 = $string;</p>
<p>$string = strtolower($string);</p>
<p>$hex_translate = array(<br />
&#8216;%43&#8242; =&gt; &#8216;C&#8217;,<br />
&#8216;%45&#8242; =&gt; &#8216;E&#8217;,<br />
&#8216;%49&#8242; =&gt; &#8216;I&#8217;,<br />
&#8216;%4c&#8217; =&gt; &#8216;L&#8217;,<br />
&#8216;%4e&#8217; =&gt; &#8216;N&#8217;,<br />
&#8216;%4f&#8217; =&gt; &#8216;O&#8217;,<br />
&#8216;%53&#8242; =&gt; &#8216;S&#8217;,<br />
&#8216;%54&#8242; =&gt; &#8216;T&#8217;,<br />
&#8216;%55&#8242; =&gt; &#8216;U&#8217;,<br />
&#8216;%63&#8242; =&gt; &#8216;c&#8217;,<br />
&#8216;%65&#8242; =&gt; &#8216;e&#8217;,<br />
&#8216;%69&#8242; =&gt; &#8216;i&#8217;,<br />
&#8216;%6c&#8217; =&gt; &#8216;l&#8217;,<br />
&#8216;%6e&#8217; =&gt; &#8216;n&#8217;,<br />
&#8216;%6f =&gt; &#8216;o&#8217;,<br />
&#8216;%73&#8242; =&gt; &#8217;s&#8217;,<br />
&#8216;%74&#8242; =&gt; &#8216;t&#8217;,<br />
&#8216;%75&#8242; =&gt; &#8216;u&#8217;,<br />
&#8216;%58&#8242; =&gt; &#8216;X&#8217;,<br />
&#8216;%78&#8242; =&gt; &#8216;x&#8217;,<br />
&#8216;%2a&#8217; =&gt; &#8216;*&#8217;,<br />
&#8216;%2f&#8217; =&gt; &#8216;/&#8217;,</p>
<p>);</p>
<p>$hex = array(<br />
&#8216;%43&#8242;,<br />
&#8216;%45&#8242;,<br />
&#8216;%49&#8242;,<br />
&#8216;%4c&#8217;,<br />
&#8216;%4e&#8217;,<br />
&#8216;%4f&#8217;,<br />
&#8216;%53&#8242;,<br />
&#8216;%54&#8242;,<br />
&#8216;%55&#8242;,<br />
&#8216;%63&#8242;,<br />
&#8216;%65&#8242;,<br />
&#8216;%69&#8242;,<br />
&#8216;%6c&#8217;,<br />
&#8216;%6e&#8217;,<br />
&#8216;%6f&#8217;,<br />
&#8216;%73&#8242;,<br />
&#8216;%74&#8242;,<br />
&#8216;%75&#8242;,<br />
&#8216;%58&#8242;,<br />
&#8216;%78&#8242;,<br />
&#8216;%2a&#8217;,<br />
&#8216;%2f&#8217;,</p>
<p>);</p>
<p>$ile=count($hex);<br />
$string = stripslashes($string);<br />
<code><span class="html"><span class="default"></span><span class="keyword"><br />
</span></span></code>for($x=0; $x&lt;$ile; $x++) {<br />
$string = str_replace($hex[$x], $hex_translate[$hex[$x]], $string);</p>
<p>}<br />
$string = str_replace(&#8216;/&#8217;, &#8221;, $string);</p>
<p>$string = str_replace(&#8216;*&#8217;, &#8221;, $string);<br />
if(preg_match(&#8220;/union|select|exec/i&#8221;,  $sring)) {<br />
exit(&#8216;System wykrył obecność nieprawidłowej zmiennej. Prawdopodobnie próba włamania się do systemu&#8230;&#8217;);<br />
}<br />
return $string2;<br />
}</p>
<p>?&gt;</p></blockquote>
<p>jak widać funkcja tłumaczy sobie z kodu hex słowa i sprawdza czy w danym stringu znajdują się zakazane rzeczy, gdy ją znajdzie kończymy działanie aplikacji. Mamy już fajny kodzik pora coś z nim zrobić. No to pozwoliłem sobie napisać kolejną funkcję tym razem taką:</p>
<blockquote><p>    &lt;?</p>
<p>function filtr($string,$string2) {foreach (<br />
$string as $res1=&gt;$res2) {if (</p>
<p>is_array($string[$res1])){</p>
<p>list(</p>
<p>$string[$res1],$string2[$res1]) = filtr($string[$res1],$string2[$res1]);} else {<br />
$res2= addslashes(htmlspecialchars(hexalert($res2, ENT_QUOTES)));</p>
<p>$string[$res1]=$string2[$res1]=$res2;}</p>
<p>}</p>
<p>return array(</p>
<p>$string,$string2);}<br />
?&gt;</p></blockquote>
<p>Myślę że kodu w powyższym załączniku nie muszę tłumaczyć <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  mamy już dwie pierwsza służy szukania zakazanych elementów, a druga do wywołania pierwszej funkcji, dodania slashy przy znakach unikodowych oraz zamienienie groźnych znaczników html.</p>
<p>całość wywołamy tak:</p>
<blockquote><p>&lt;?</p>
<p>list($_GET,$GLOBALS) = filtr($_GET,$GLOBALS);list(<br />
$_POST,$GLOBALS) = filtr($_POST,$GLOBALS);list(<br />
$_COOKIE,$GLOBALS) = filtr($_COOKIE,$GLOBALS);list(<br />
$_REQUEST,$GLOBALS) = filtr($_REQUEST,$GLOBALS);list(<br />
$_SERVER,$GLOBALS) = filtr($_SERVER,$GLOBALS);list(<br />
$_FILES,$GLOBALS) = filtr($_FILES,$GLOBALS);</p>
<p>?&gt;</p></blockquote>
<p>no i to już koniec roboty <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/axelpl.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/axelpl.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/axelpl.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/axelpl.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/axelpl.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/axelpl.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/axelpl.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/axelpl.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/axelpl.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/axelpl.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/axelpl.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/axelpl.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=axelpl.wordpress.com&blog=2423696&post=3&subd=axelpl&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://axelpl.wordpress.com/2008/01/01/uniwersalne-zabezpieczenie-przed-sql-injection-i-xss/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9700b666e8b0684974da716f5b64d922?s=96&#38;d=identicon" medium="image">
			<media:title type="html">axelpl</media:title>
		</media:content>
	</item>
	</channel>
</rss>