<?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>Hack Network &#187; php</title>
	<atom:link href="http://www.hack.net.br/blog/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hack.net.br/blog</link>
	<description></description>
	<lastBuildDate>Tue, 08 Nov 2011 10:39:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Solução para SQL Injection</title>
		<link>http://www.hack.net.br/blog/hacking/solucao-para-sql-injection/</link>
		<comments>http://www.hack.net.br/blog/hacking/solucao-para-sql-injection/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 23:09:46 +0000</pubDate>
		<dc:creator>yuri.azambuja</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Português-Brasil]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.hack.net.br/?p=179</guid>
		<description><![CDATA[Um dos maiores descuidos dos desenvolvedores de software ocorre passar os parâmetros de consultas aos bancos de dados. O SQL Injection é um método usado por Hackes executar no banco de dados do sistema o SQL que quizer, por meio de brechas nos sistemas.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">Um dos maiores descuidos dos desenvolvedores de software ocorre ao passar os parâmetros de consultas aos bancos de dados. O SQL Injection é um método usado por Hackes para executar o comando que quiser no banco de dados do sistema, por meio de brechas.<span id="more-179"></span></p>
<p style="text-align: justify">Por exemplo, uma simples consulta aos produtos de um comércio eleterônico pode ser feita da seguinte forma:</p>
<blockquote>
<p style="text-align: justify">$sql = &#8220;SELECT * FROM produtos WHERE id_produto = &#8216;{$_GET['id']}&#8217;;&#8221;;</p>
</blockquote>
<p style="text-align: justify">Quando o visitante for acessar o endereço &#8220;produto.php?id=123&#8243;, o SQL gerado será &#8220;SELECT * FROM produtos WHERE id_produto = &#8217;123&#8242;;&#8221;, e o resultado esperado será obtido.</p>
<p style="text-align: justify">Contudo, se o visitante estiver mal intencionado, ele poderá alterar o endereço no seu navegador para &#8220;produto.php?id=123&#8242;;DELETE FROM clientes WHERE &#8217;0&#8242;=&#8217;0&#8243;, e o SQL gerado será &#8220;SELECT * FROM produtos WHERE id_produto = &#8217;123&#8242;;DELETE FROM clientes WHERE &#8217;0&#8242;=&#8217;0&#8242;;&#8221;, o que será interfretado pelo canco de dados como 2 comandos diferentes: Um SELECT previsto, e um DELETE que não poderia ser realizado.</p>
<p style="text-align: justify">Para evitar este problema, é importante utilizar funções de tratamento de string. Cada banco de dados possui a sua própria função. A seguir, segue uma função que faz os devidos tratamentos para cada tipo de variável (descomente o retorno adequado para o seu banco de dados):</p>
<blockquote><p>function sql($valor){</p>
<p style="padding-left: 30px">if(is_bool($valor))</p>
<p style="padding-left: 60px">return $valor?&#8221;TRUE&#8221;:&#8221;FALSE&#8221;;</p>
<p style="padding-left: 30px">else if(is_numeric($valor))</p>
<p style="padding-left: 60px">return $valor;</p>
<p style="padding-left: 30px">else if(empty($valor)||is_null($valor))</p>
<p style="padding-left: 60px">return &#8220;NULL&#8221;;</p>
<p style="padding-left: 30px">if(get_magic_quotes_gpc())</p>
<p style="padding-left: 60px">$valor = stripslashes($valor);</p>
<p style="padding-left: 30px">// MySQL</p>
<p style="padding-left: 30px">//return &#8220;&#8216;&#8221;.mysql_real_escape_string($valor).&#8221;&#8216;&#8221;;</p>
<p style="padding-left: 30px">// PgSQL</p>
<p style="padding-left: 30px">//return &#8220;&#8216;&#8221;.pg_escape_string($valor).&#8221;&#8216;&#8221;;</p>
<p style="padding-left: 30px">// SQLite</p>
<p style="padding-left: 30px">//return &#8220;&#8216;&#8221;.sqlite_escape_string($valor).&#8221;&#8216;&#8221;;</p>
<p>}</p></blockquote>
<p style="text-align: justify">Com esta função, basta reescrever o seu código da seguinte forma:</p>
<blockquote>
<p style="text-align: justify">$sql = &#8220;SELECT * FROM produtos WHERE id_produto = &#8220;.sql($_GET['id']).&#8221;;&#8221;;</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.hack.net.br/blog/hacking/solucao-para-sql-injection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

