<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Php Security &#8211; Nem tudo que é publicado deve ser seguido</title>
	<atom:link href="http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/feed/" rel="self" type="application/rss+xml" />
	<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/</link>
	<description>BCP, BIA, DRP, Security Assessment, Risk Assessment, Security Developer</description>
	<lastBuildDate>Wed, 05 Oct 2011 13:05:28 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Elias Wagner</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1169</link>
		<dc:creator>Elias Wagner</dc:creator>
		<pubDate>Wed, 01 Dec 2010 23:07:23 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1169</guid>
		<description>Eu desconheço uma outra versão.&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1169&#039;,&#039;Elias Wagner&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1169&#039;,&#039;Elias Wagner&#039;,&#039;Eu desconhe&#195;&#167;o uma outra vers&#195;&#163;o.&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>Eu desconheço uma outra versão.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1169','Elias Wagner'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1169','Elias Wagner','Eu desconhe&Atilde;&sect;o uma outra vers&Atilde;&pound;o.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Guilherme</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1166</link>
		<dc:creator>Guilherme</dc:creator>
		<pubDate>Tue, 09 Nov 2010 15:15:31 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1166</guid>
		<description>Alguém ter a segunda versão desse livro ?&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1166&#039;,&#039;Guilherme&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1166&#039;,&#039;Guilherme&#039;,&#039;Algu&#195;&#169;m ter a segunda vers&#195;&#163;o desse livro ?&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>Alguém ter a segunda versão desse livro ?
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1166','Guilherme'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1166','Guilherme','Algu&Atilde;&copy;m ter a segunda vers&Atilde;&pound;o desse livro ?'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tropeçando 23 &#124; Rafael Bernard Araujo</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1058</link>
		<dc:creator>Tropeçando 23 &#124; Rafael Bernard Araujo</dc:creator>
		<pubDate>Fri, 16 Apr 2010 12:35:10 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1058</guid>
		<description></description>
		<content:encoded><![CDATA[<p>[...] Php Security – Nem tudo que é publicado deve ser seguido &#8211; Wagner Elias – Think Security &#8230; [...]
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1058','Trope&Atilde;&sect;ando 23 | Rafael Bernard Araujo'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1058','Trope&Atilde;&sect;ando 23 | Rafael Bernard Araujo','&amp;#91;...&amp;#93; Php Security &acirc; Nem tudo que &Atilde;&copy; publicado deve ser seguido &amp;#8211; Wagner Elias &acirc; Think Security ... &amp;#91;...&amp;#93;'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rubens Takiguti Ribeiro</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1044</link>
		<dc:creator>Rubens Takiguti Ribeiro</dc:creator>
		<pubDate>Wed, 17 Mar 2010 01:29:46 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1044</guid>
		<description></description>
		<content:encoded><![CDATA[<blockquote><p><a href='#comment-1041' rel="nofollow">Originally Posted By Elias Wagner</a>Rubens,</p>
<p>obrigado pelos comentÃ¡rios. </p>
<p>O post e nem eu me considero verdade absoluta, mas eu continuo nÃ£o acreditando que usar uma variÃ¡vel global para definir um nome de arquivo e nÃ£o sanitizar nÃ£o Ã© uma boa prÃ¡tica. Existem vÃ¡rias referÃªncias de falhas que usam do recurso de globals nÃ£o validadas.</p>
<p>Abs.</p></blockquote>
<p>Elias, na verdade eu não acho que não seja uma boa prática. Aliás, você está de parabéns em querer sanitizar tudo. Afinal, é muito melhor sanitizar tudo do que não sanitizar nada (e isso acontece aos montes).</p>
<p>Eu, particularmente, procuro refletir sobre as falhas e utilizar tais recursos onde considero realmente necessários. Especialmente por uma questão de processamento desnecessário.</p>
<p>O que soa estranho é quando você critica algo com uma argumentação: &#8220;super globais precisam ser sanitizadas sempre&#8221;. Com certeza existem muitos casos onde elas precisam, mas outros não.</p>
<p>Acho que um bom livro sobre segurança é aquele que se concentra mais em apresentar a essência das falhas de segurança. E mostra algumas &#8220;soluções conhecidas&#8221; apenas para ilustrar. Afinal, existem muitas formas para não deixar brechas e todo programador precisa ser critico e ter flexibilidade para avaliar falhas pouco conhecidas também.</p>
<p>Por exemplo: toda linguagem acessada por outra linguagem precisa de tratamentos especiais. SQL é a mais comum, com as SQL injections, mas poucos sabem sobre Mail injection, por exemplo. Enfim, se algum dia eu usar PHP para acessar outra linguagem, tenho certeza que terei que fazer um tratamento especial sobre as variáveis usadas para &#8220;montar&#8221; o código da outra linguagem. Talvez essa &#8220;linguagem&#8221; nem exista ainda e a falha não tem um nome popular como &#8220;SQL injection&#8221; ou &#8220;XSS&#8221;, mas o importante é já saber como se deparar com ela. A falha é conceitual, não específica.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1044','Rubens Takiguti Ribeiro'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1044','Rubens Takiguti Ribeiro','&lt;blockquote&gt;&lt;a href=\'#comment-1041\' rel=\&quot;nofollow\&quot;&gt;Originally Posted By Elias Wagner&lt;\/a&gt;Rubens,\r\n\r\nobrigado pelos coment&Atilde;&Acirc;&iexcl;rios. \r\n\r\nO post e nem eu me considero verdade absoluta, mas eu continuo n&Atilde;&Acirc;&pound;o acreditando que usar uma vari&Atilde;&Acirc;&iexcl;vel global para definir um nome de arquivo e n&Atilde;&Acirc;&pound;o sanitizar n&Atilde;&Acirc;&pound;o &Atilde;&Acirc;&copy; uma boa pr&Atilde;&Acirc;&iexcl;tica. Existem v&Atilde;&Acirc;&iexcl;rias refer&Atilde;&Acirc;&ordf;ncias de falhas que usam do recurso de globals n&Atilde;&Acirc;&pound;o validadas.\r\n\r\nAbs.&lt;\/blockquote&gt;\r\n\r\nElias, na verdade eu n&Atilde;&pound;o acho que n&Atilde;&pound;o seja uma boa pr&Atilde;&iexcl;tica. Ali&Atilde;&iexcl;s, voc&Atilde;&ordf; est&Atilde;&iexcl; de parab&Atilde;&copy;ns em querer sanitizar tudo. Afinal, &Atilde;&copy; muito melhor sanitizar tudo do que n&Atilde;&pound;o sanitizar nada (e isso acontece aos montes).\r\n\r\nEu, particularmente, procuro refletir sobre as falhas e utilizar tais recursos onde considero realmente necess&Atilde;&iexcl;rios. Especialmente por uma quest&Atilde;&pound;o de processamento desnecess&Atilde;&iexcl;rio.\r\n\r\nO que soa estranho &Atilde;&copy; quando voc&Atilde;&ordf; critica algo com uma argumenta&Atilde;&sect;&Atilde;&pound;o: \&quot;super globais precisam ser sanitizadas sempre\&quot;. Com certeza existem muitos casos onde elas precisam, mas outros n&Atilde;&pound;o.\r\n\r\nAcho que um bom livro sobre seguran&Atilde;&sect;a &Atilde;&copy; aquele que se concentra mais em apresentar a ess&Atilde;&ordf;ncia das falhas de seguran&Atilde;&sect;a. E mostra algumas \&quot;solu&Atilde;&sect;&Atilde;&micro;es conhecidas\&quot; apenas para ilustrar. Afinal, existem muitas formas para n&Atilde;&pound;o deixar brechas e todo programador precisa ser critico e ter flexibilidade para avaliar falhas pouco conhecidas tamb&Atilde;&copy;m.\r\n\r\nPor exemplo: toda linguagem acessada por outra linguagem precisa de tratamentos especiais. SQL &Atilde;&copy; a mais comum, com as SQL injections, mas poucos sabem sobre Mail injection, por exemplo. Enfim, se algum dia eu usar PHP para acessar outra linguagem, tenho certeza que terei que fazer um tratamento especial sobre as vari&Atilde;&iexcl;veis usadas para \&quot;montar\&quot; o c&Atilde;&sup3;digo da outra linguagem. Talvez essa \&quot;linguagem\&quot; nem exista ainda e a falha n&Atilde;&pound;o tem um nome popular como \&quot;SQL injection\&quot; ou \&quot;XSS\&quot;, mas o importante &Atilde;&copy; j&Atilde;&iexcl; saber como se deparar com ela. A falha &Atilde;&copy; conceitual, n&Atilde;&pound;o espec&Atilde;&shy;fica.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Elias Wagner</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1043</link>
		<dc:creator>Elias Wagner</dc:creator>
		<pubDate>Tue, 16 Mar 2010 13:50:39 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1043</guid>
		<description>Você tem toda razão, é para evitar ataque de dicionário pre-computado!

Abs.&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1043&#039;,&#039;Elias Wagner&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1043&#039;,&#039;Elias Wagner&#039;,&#039;Voc&#195;&#170; tem toda raz&#195;&#163;o, &#195;&#169; para evitar ataque de dicion&#195;&#161;rio pre-computado!\n\nAbs.&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>Você tem toda razão, é para evitar ataque de dicionário pre-computado!</p>
<p>Abs.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1043','Elias Wagner'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1043','Elias Wagner','Voc&Atilde;&ordf; tem toda raz&Atilde;&pound;o, &Atilde;&copy; para evitar ataque de dicion&Atilde;&iexcl;rio pre-computado!\n\nAbs.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Elias Wagner</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1042</link>
		<dc:creator>Elias Wagner</dc:creator>
		<pubDate>Tue, 16 Mar 2010 13:48:22 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1042</guid>
		<description>Sim, é possível fazer código sem falhas mesmo com Globals habilitada, mas não deixa de ser uma falha o Globals habilitado. Um deslize e a aplicação se torna vulnerável devido a uma falha de configuração.

Abs.&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1042&#039;,&#039;Elias Wagner&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1042&#039;,&#039;Elias Wagner&#039;,&#039;Sim, &#195;&#169; poss&#195;&#173;vel fazer c&#195;&#179;digo sem falhas mesmo com Globals habilitada, mas n&#195;&#163;o deixa de ser uma falha o Globals habilitado. Um deslize e a aplica&#195;&#167;&#195;&#163;o se torna vulner&#195;&#161;vel devido a uma falha de configura&#195;&#167;&#195;&#163;o.\n\nAbs.&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>Sim, é possível fazer código sem falhas mesmo com Globals habilitada, mas não deixa de ser uma falha o Globals habilitado. Um deslize e a aplicação se torna vulnerável devido a uma falha de configuração.</p>
<p>Abs.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1042','Elias Wagner'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1042','Elias Wagner','Sim, &Atilde;&copy; poss&Atilde;&shy;vel fazer c&Atilde;&sup3;digo sem falhas mesmo com Globals habilitada, mas n&Atilde;&pound;o deixa de ser uma falha o Globals habilitado. Um deslize e a aplica&Atilde;&sect;&Atilde;&pound;o se torna vulner&Atilde;&iexcl;vel devido a uma falha de configura&Atilde;&sect;&Atilde;&pound;o.\n\nAbs.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Elias Wagner</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1041</link>
		<dc:creator>Elias Wagner</dc:creator>
		<pubDate>Tue, 16 Mar 2010 13:46:47 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1041</guid>
		<description>Rubens,

obrigado pelos comentários. 

O post e nem eu me considero verdade absoluta, mas eu continuo não acreditando que usar uma variável global para definir um nome de arquivo e não sanitizar não é uma boa prática. Existem várias referências de falhas que usam do recurso de globals não validadas.

Abs.&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1041&#039;,&#039;Elias Wagner&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1041&#039;,&#039;Elias Wagner&#039;,&#039;Rubens,\n\nobrigado pelos coment&#195;&#161;rios. \n\nO post e nem eu me considero verdade absoluta, mas eu continuo n&#195;&#163;o acreditando que usar uma vari&#195;&#161;vel global para definir um nome de arquivo e n&#195;&#163;o sanitizar n&#195;&#163;o &#195;&#169; uma boa pr&#195;&#161;tica. Existem v&#195;&#161;rias refer&#195;&#170;ncias de falhas que usam do recurso de globals n&#195;&#163;o validadas.\n\nAbs.&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>Rubens,</p>
<p>obrigado pelos comentários. </p>
<p>O post e nem eu me considero verdade absoluta, mas eu continuo não acreditando que usar uma variável global para definir um nome de arquivo e não sanitizar não é uma boa prática. Existem várias referências de falhas que usam do recurso de globals não validadas.</p>
<p>Abs.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1041','Elias Wagner'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1041','Elias Wagner','Rubens,\n\nobrigado pelos coment&Atilde;&iexcl;rios. \n\nO post e nem eu me considero verdade absoluta, mas eu continuo n&Atilde;&pound;o acreditando que usar uma vari&Atilde;&iexcl;vel global para definir um nome de arquivo e n&Atilde;&pound;o sanitizar n&Atilde;&pound;o &Atilde;&copy; uma boa pr&Atilde;&iexcl;tica. Existem v&Atilde;&iexcl;rias refer&Atilde;&ordf;ncias de falhas que usam do recurso de globals n&Atilde;&pound;o validadas.\n\nAbs.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rubens Takiguti Ribeiro</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1040</link>
		<dc:creator>Rubens Takiguti Ribeiro</dc:creator>
		<pubDate>Tue, 16 Mar 2010 01:16:42 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1040</guid>
		<description></description>
		<content:encoded><![CDATA[<blockquote><p><a href='#comment-1026' rel="nofollow">Originally Posted By Elias Wagner</a>Register Globals habilitado realmente Ã© uma falha grave, inclusive as novas versÃµes jÃ¡ vem desabilitada por default[...]</p></blockquote>
<p>Elias, não considero register globals uma falha grave. A utilização de register globals PROPICIA o aparecimento de falhas de segurança. E é por este motivo que ele será removido do PHP. Que fique claro que é possível criar código seguro com register globals ativada.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1040','Rubens Takiguti Ribeiro'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1040','Rubens Takiguti Ribeiro','&lt;blockquote&gt;&lt;a href=\'#comment-1026\' rel=\&quot;nofollow\&quot;&gt;Originally Posted By Elias Wagner&lt;\/a&gt;Register Globals habilitado realmente &Atilde;&Acirc;&copy; uma falha grave, inclusive as novas vers&Atilde;&Acirc;&micro;es j&Atilde;&Acirc;&iexcl; vem desabilitada por default&amp;#91;...&amp;#93;&lt;\/blockquote&gt;\r\n\r\nElias, n&Atilde;&pound;o considero register globals uma falha grave. A utiliza&Atilde;&sect;&Atilde;&pound;o de register globals PROPICIA o aparecimento de falhas de seguran&Atilde;&sect;a. E &Atilde;&copy; por este motivo que ele ser&Atilde;&iexcl; removido do PHP. Que fique claro que &Atilde;&copy; poss&Atilde;&shy;vel criar c&Atilde;&sup3;digo seguro com register globals ativada.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rubens Takiguti Ribeiro</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1039</link>
		<dc:creator>Rubens Takiguti Ribeiro</dc:creator>
		<pubDate>Tue, 16 Mar 2010 00:55:41 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1039</guid>
		<description>1 - Nem todas variáveis super globais podem ser modificadas pelo cliente ($_SESSION, $_ENV e alguns valores de $_SERVER são alguns exemplos) e não precisam ser sanitizadas dependendo do contexto. No exemplo apresentado, se o cliente conseguir mudar o $_SERVER[&#039;SCRIPT_NAME&#039;] para algo malicioso, será algo malicioso apenas para ele mesmo. Qualquer cliente consegue modificar o HTML com plugins como &quot;Web Developer&quot; para Firefox, por exemplo, isso não tem como evitar. Ele pode trocar o action de qualquer form, fazendo besteira, mas só afetaria ele mesmo. Isso é uma falha? Entendo que o importante é o sistema só aceitar valores válidos vindos de clientes, mas, no exemplo, o valor vindo do cliente só está sendo usado para montar uma página para ele mesmo.

2 - De fato, time não é a melhor função para se gerar o salt. Mas acho que esta é a única coisa inadequada. As principais falhas de segurança relacionadas à autenticação seriam: (i) alguém conseguir descobrir a senha de outra pessoa; (ii) alguém conseguir acessar como outra pessoa sem informar as credenciais adequadas; ou (iii) alguém conseguir testar um pacote de logins/senhas no sistema em busca de um par de valores válidos. O salt está indiretamente ligado apenas ao item (i). Mas, gerando a senha criptografada, já fica complicado obter a senha original, seja com salt ou não. O item (ii) e (iii) são tratados por outros mecanismos. O salt, pra mim, é um detalhe. Por mim pode até intercalar as soluções apresentadas: deixar um pedaço do salt no BD e parte dele ser estático em código. Enfim, é preciso se concentrar nas possiveis falhas, e não apenas no que as pessoas dizem que precisa se preocupar.

3 - Realmente neste ponto o livro errou feio. Referer é definido (opcionalmente) pelo navegador e pode ser burlável. Mas você dizer que todas super globais são editáveis pelo cliente, você se engana também.

Uma coisa eu concordo com você: não podemos seguir tudo aquilo que é publicado. Porém, tenho que admitir que isso também vale para parte de seu texto.&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1039&#039;,&#039;Rubens Takiguti Ribeiro&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1039&#039;,&#039;Rubens Takiguti Ribeiro&#039;,&#039;1 - Nem todas vari&#195;&#161;veis super globais podem ser modificadas pelo cliente ($_SESSION, $_ENV e alguns valores de $_SERVER s&#195;&#163;o alguns exemplos) e n&#195;&#163;o precisam ser sanitizadas dependendo do contexto. No exemplo apresentado, se o cliente conseguir mudar o $_SERVER&#091;\&#039;SCRIPT_NAME\&#039;&#093; para algo malicioso, ser&#195;&#161; algo malicioso apenas para ele mesmo. Qualquer cliente consegue modificar o HTML com plugins como \&quot;Web Developer\&quot; para Firefox, por exemplo, isso n&#195;&#163;o tem como evitar. Ele pode trocar o action de qualquer form, fazendo besteira, mas s&#195;&#179; afetaria ele mesmo. Isso &#195;&#169; uma falha? Entendo que o importante &#195;&#169; o sistema s&#195;&#179; aceitar valores v&#195;&#161;lidos vindos de clientes, mas, no exemplo, o valor vindo do cliente s&#195;&#179; est&#195;&#161; sendo usado para montar uma p&#195;&#161;gina para ele mesmo.\r\n\r\n2 - De fato, time n&#195;&#163;o &#195;&#169; a melhor fun&#195;&#167;&#195;&#163;o para se gerar o salt. Mas acho que esta &#195;&#169; a &#195;&#186;nica coisa inadequada. As principais falhas de seguran&#195;&#167;a relacionadas &#195;&#160; autentica&#195;&#167;&#195;&#163;o seriam: (i) algu&#195;&#169;m conseguir descobrir a senha de outra pessoa; (ii) algu&#195;&#169;m conseguir acessar como outra pessoa sem informar as credenciais adequadas; ou (iii) algu&#195;&#169;m conseguir testar um pacote de logins\/senhas no sistema em busca de um par de valores v&#195;&#161;lidos. O salt est&#195;&#161; indiretamente ligado apenas ao item (i). Mas, gerando a senha criptografada, j&#195;&#161; fica complicado obter a senha original, seja com salt ou n&#195;&#163;o. O item (ii) e (iii) s&#195;&#163;o tratados por outros mecanismos. O salt, pra mim, &#195;&#169; um detalhe. Por mim pode at&#195;&#169; intercalar as solu&#195;&#167;&#195;&#181;es apresentadas: deixar um peda&#195;&#167;o do salt no BD e parte dele ser est&#195;&#161;tico em c&#195;&#179;digo. Enfim, &#195;&#169; preciso se concentrar nas possiveis falhas, e n&#195;&#163;o apenas no que as pessoas dizem que precisa se preocupar.\r\n\r\n3 - Realmente neste ponto o livro errou feio. Referer &#195;&#169; definido (opcionalmente) pelo navegador e pode ser burl&#195;&#161;vel. Mas voc&#195;&#170; dizer que todas super globais s&#195;&#163;o edit&#195;&#161;veis pelo cliente, voc&#195;&#170; se engana tamb&#195;&#169;m.\r\n\r\nUma coisa eu concordo com voc&#195;&#170;: n&#195;&#163;o podemos seguir tudo aquilo que &#195;&#169; publicado. Por&#195;&#169;m, tenho que admitir que isso tamb&#195;&#169;m vale para parte de seu texto.&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>1 &#8211; Nem todas variáveis super globais podem ser modificadas pelo cliente ($_SESSION, $_ENV e alguns valores de $_SERVER são alguns exemplos) e não precisam ser sanitizadas dependendo do contexto. No exemplo apresentado, se o cliente conseguir mudar o $_SERVER['SCRIPT_NAME'] para algo malicioso, será algo malicioso apenas para ele mesmo. Qualquer cliente consegue modificar o HTML com plugins como &#8220;Web Developer&#8221; para Firefox, por exemplo, isso não tem como evitar. Ele pode trocar o action de qualquer form, fazendo besteira, mas só afetaria ele mesmo. Isso é uma falha? Entendo que o importante é o sistema só aceitar valores válidos vindos de clientes, mas, no exemplo, o valor vindo do cliente só está sendo usado para montar uma página para ele mesmo.</p>
<p>2 &#8211; De fato, time não é a melhor função para se gerar o salt. Mas acho que esta é a única coisa inadequada. As principais falhas de segurança relacionadas à autenticação seriam: (i) alguém conseguir descobrir a senha de outra pessoa; (ii) alguém conseguir acessar como outra pessoa sem informar as credenciais adequadas; ou (iii) alguém conseguir testar um pacote de logins/senhas no sistema em busca de um par de valores válidos. O salt está indiretamente ligado apenas ao item (i). Mas, gerando a senha criptografada, já fica complicado obter a senha original, seja com salt ou não. O item (ii) e (iii) são tratados por outros mecanismos. O salt, pra mim, é um detalhe. Por mim pode até intercalar as soluções apresentadas: deixar um pedaço do salt no BD e parte dele ser estático em código. Enfim, é preciso se concentrar nas possiveis falhas, e não apenas no que as pessoas dizem que precisa se preocupar.</p>
<p>3 &#8211; Realmente neste ponto o livro errou feio. Referer é definido (opcionalmente) pelo navegador e pode ser burlável. Mas você dizer que todas super globais são editáveis pelo cliente, você se engana também.</p>
<p>Uma coisa eu concordo com você: não podemos seguir tudo aquilo que é publicado. Porém, tenho que admitir que isso também vale para parte de seu texto.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1039','Rubens Takiguti Ribeiro'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1039','Rubens Takiguti Ribeiro','1 - Nem todas vari&Atilde;&iexcl;veis super globais podem ser modificadas pelo cliente ($_SESSION, $_ENV e alguns valores de $_SERVER s&Atilde;&pound;o alguns exemplos) e n&Atilde;&pound;o precisam ser sanitizadas dependendo do contexto. No exemplo apresentado, se o cliente conseguir mudar o $_SERVER&amp;#91;\'SCRIPT_NAME\'&amp;#93; para algo malicioso, ser&Atilde;&iexcl; algo malicioso apenas para ele mesmo. Qualquer cliente consegue modificar o HTML com plugins como \&quot;Web Developer\&quot; para Firefox, por exemplo, isso n&Atilde;&pound;o tem como evitar. Ele pode trocar o action de qualquer form, fazendo besteira, mas s&Atilde;&sup3; afetaria ele mesmo. Isso &Atilde;&copy; uma falha? Entendo que o importante &Atilde;&copy; o sistema s&Atilde;&sup3; aceitar valores v&Atilde;&iexcl;lidos vindos de clientes, mas, no exemplo, o valor vindo do cliente s&Atilde;&sup3; est&Atilde;&iexcl; sendo usado para montar uma p&Atilde;&iexcl;gina para ele mesmo.\r\n\r\n2 - De fato, time n&Atilde;&pound;o &Atilde;&copy; a melhor fun&Atilde;&sect;&Atilde;&pound;o para se gerar o salt. Mas acho que esta &Atilde;&copy; a &Atilde;&ordm;nica coisa inadequada. As principais falhas de seguran&Atilde;&sect;a relacionadas &Atilde;&nbsp; autentica&Atilde;&sect;&Atilde;&pound;o seriam: (i) algu&Atilde;&copy;m conseguir descobrir a senha de outra pessoa; (ii) algu&Atilde;&copy;m conseguir acessar como outra pessoa sem informar as credenciais adequadas; ou (iii) algu&Atilde;&copy;m conseguir testar um pacote de logins\/senhas no sistema em busca de um par de valores v&Atilde;&iexcl;lidos. O salt est&Atilde;&iexcl; indiretamente ligado apenas ao item (i). Mas, gerando a senha criptografada, j&Atilde;&iexcl; fica complicado obter a senha original, seja com salt ou n&Atilde;&pound;o. O item (ii) e (iii) s&Atilde;&pound;o tratados por outros mecanismos. O salt, pra mim, &Atilde;&copy; um detalhe. Por mim pode at&Atilde;&copy; intercalar as solu&Atilde;&sect;&Atilde;&micro;es apresentadas: deixar um peda&Atilde;&sect;o do salt no BD e parte dele ser est&Atilde;&iexcl;tico em c&Atilde;&sup3;digo. Enfim, &Atilde;&copy; preciso se concentrar nas possiveis falhas, e n&Atilde;&pound;o apenas no que as pessoas dizem que precisa se preocupar.\r\n\r\n3 - Realmente neste ponto o livro errou feio. Referer &Atilde;&copy; definido (opcionalmente) pelo navegador e pode ser burl&Atilde;&iexcl;vel. Mas voc&Atilde;&ordf; dizer que todas super globais s&Atilde;&pound;o edit&Atilde;&iexcl;veis pelo cliente, voc&Atilde;&ordf; se engana tamb&Atilde;&copy;m.\r\n\r\nUma coisa eu concordo com voc&Atilde;&ordf;: n&Atilde;&pound;o podemos seguir tudo aquilo que &Atilde;&copy; publicado. Por&Atilde;&copy;m, tenho que admitir que isso tamb&Atilde;&copy;m vale para parte de seu texto.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: PHP Security – Nem tudo que é publicado deve ser seguido &#171; Fernando Martini</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1035</link>
		<dc:creator>PHP Security – Nem tudo que é publicado deve ser seguido &#171; Fernando Martini</dc:creator>
		<pubDate>Mon, 08 Mar 2010 02:04:46 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1035</guid>
		<description></description>
		<content:encoded><![CDATA[<p>[...] “Uma análise de códigos publicados em um livro de segurança em php que possuem falhas. Os códigos possuem falhas que podem passar desapercebidos por programadores menos experientes, mas que são um prato cheio para usuários mal intencionados. Uma lição de que é necessário validar as fontes e questionar o que lhe apresentam como solução.” Fonte: <a href="http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/" rel="nofollow">http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/</a> [...]
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1035','PHP Security &acirc; Nem tudo que &Atilde;&copy; publicado deve ser seguido &amp;laquo; Fernando Martini'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1035','PHP Security &acirc; Nem tudo que &Atilde;&copy; publicado deve ser seguido &amp;laquo; Fernando Martini','&amp;#91;...&amp;#93; &acirc;Uma an&Atilde;&iexcl;lise de c&Atilde;&sup3;digos publicados em um livro de seguran&Atilde;&sect;a em php que possuem falhas. Os c&Atilde;&sup3;digos possuem falhas que podem passar desapercebidos por programadores menos experientes, mas que s&Atilde;&pound;o um prato cheio para usu&Atilde;&iexcl;rios mal intencionados. Uma li&Atilde;&sect;&Atilde;&pound;o de que &Atilde;&copy; necess&Atilde;&iexcl;rio validar as fontes e questionar o que lhe apresentam como solu&Atilde;&sect;&Atilde;&pound;o.&acirc; Fonte: http:\/\/wagnerelias.com\/2010\/03\/04\/php-security-nem-tudo-que-e-publicado-deve-ser-seguido\/ &amp;#91;...&amp;#93;'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Magno</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1034</link>
		<dc:creator>Magno</dc:creator>
		<pubDate>Sun, 07 Mar 2010 12:56:19 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1034</guid>
		<description>Muito obrigado pelas dicas.&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1034&#039;,&#039;Magno&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1034&#039;,&#039;Magno&#039;,&#039;Muito obrigado pelas dicas.&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>Muito obrigado pelas dicas.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1034','Magno'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1034','Magno','Muito obrigado pelas dicas.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: elias</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1033</link>
		<dc:creator>elias</dc:creator>
		<pubDate>Sun, 07 Mar 2010 03:39:21 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1033</guid>
		<description>o salt serve pra inviabilizar um dicionario pre-computado, nao pra inviabilizar um ataque de força bruta. entre ter o hash e o salt e ter a senha, existem muitos ciclos de maquina..

o interessante de um salt por senha é que as hashes calculadas pra quebrar a senha dos outros não vai servir pra _sua_ senha. e também não fica trivial verificar se duas pessoas tem a mesma senha, que é um indício de senha fraquíssima

o ataque que voce parece supor é que as hashes estarão comprometidas, mas o salt estaria em um lugar seguro e inacessível. nesse caso você nem precisa de salt: basta armazenar logo as hashes no suposto lugar seguro e inacessível. :)

ps: desculpa, mas php security é quase um oxímoro..&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1033&#039;,&#039;elias&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1033&#039;,&#039;elias&#039;,&#039;o salt serve pra inviabilizar um dicionario pre-computado, nao pra inviabilizar um ataque de for&#195;&#167;a bruta. entre ter o hash e o salt e ter a senha, existem muitos ciclos de maquina..\r\n\r\no interessante de um salt por senha &#195;&#169; que as hashes calculadas pra quebrar a senha dos outros n&#195;&#163;o vai servir pra _sua_ senha. e tamb&#195;&#169;m n&#195;&#163;o fica trivial verificar se duas pessoas tem a mesma senha, que &#195;&#169; um ind&#195;&#173;cio de senha fraqu&#195;&#173;ssima\r\n\r\no ataque que voce parece supor &#195;&#169; que as hashes estar&#195;&#163;o comprometidas, mas o salt estaria em um lugar seguro e inacess&#195;&#173;vel. nesse caso voc&#195;&#170; nem precisa de salt: basta armazenar logo as hashes no suposto lugar seguro e inacess&#195;&#173;vel. :)\r\n\r\nps: desculpa, mas php security &#195;&#169; quase um ox&#195;&#173;moro..&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>o salt serve pra inviabilizar um dicionario pre-computado, nao pra inviabilizar um ataque de força bruta. entre ter o hash e o salt e ter a senha, existem muitos ciclos de maquina..</p>
<p>o interessante de um salt por senha é que as hashes calculadas pra quebrar a senha dos outros não vai servir pra _sua_ senha. e também não fica trivial verificar se duas pessoas tem a mesma senha, que é um indício de senha fraquíssima</p>
<p>o ataque que voce parece supor é que as hashes estarão comprometidas, mas o salt estaria em um lugar seguro e inacessível. nesse caso você nem precisa de salt: basta armazenar logo as hashes no suposto lugar seguro e inacessível. <img src='http://wagnerelias.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ps: desculpa, mas php security é quase um oxímoro..
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1033','elias'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1033','elias','o salt serve pra inviabilizar um dicionario pre-computado, nao pra inviabilizar um ataque de for&Atilde;&sect;a bruta. entre ter o hash e o salt e ter a senha, existem muitos ciclos de maquina..\r\n\r\no interessante de um salt por senha &Atilde;&copy; que as hashes calculadas pra quebrar a senha dos outros n&Atilde;&pound;o vai servir pra _sua_ senha. e tamb&Atilde;&copy;m n&Atilde;&pound;o fica trivial verificar se duas pessoas tem a mesma senha, que &Atilde;&copy; um ind&Atilde;&shy;cio de senha fraqu&Atilde;&shy;ssima\r\n\r\no ataque que voce parece supor &Atilde;&copy; que as hashes estar&Atilde;&pound;o comprometidas, mas o salt estaria em um lugar seguro e inacess&Atilde;&shy;vel. nesse caso voc&Atilde;&ordf; nem precisa de salt: basta armazenar logo as hashes no suposto lugar seguro e inacess&Atilde;&shy;vel. :)\r\n\r\nps: desculpa, mas php security &Atilde;&copy; quase um ox&Atilde;&shy;moro..'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Elias Wagner</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1031</link>
		<dc:creator>Elias Wagner</dc:creator>
		<pubDate>Sat, 06 Mar 2010 18:13:09 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1031</guid>
		<description>&lt;a href=&#039;#comment-1029&#039; rel=&quot;nofollow&quot;&gt;@ideud8ef&lt;/a&gt; - hahaha, maldoso você.

Concordo que o uso de um bom salt é essencial e se for complexo o suficiente vai quase impossível reverter a senha com um hash pré-computado.

Em php eu acho mais interessante um salt hard-coded do que em banco de dados. 

Esta sim é uma boa abordagem:

&quot;Uma abordagem interessante seria armazenar um pre-salt no banco de dados junto com os demais dados do usuário e aplicar um hmac com uma senha contida em arquivo no servidor a esse pre-salt para gerar o salt verdadeiro.&quot;&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1031&#039;,&#039;Elias Wagner&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1031&#039;,&#039;Elias Wagner&#039;,&#039;&lt;a href=\&#039;#comment-1029\&#039; rel=\&quot;nofollow\&quot;&gt;@ideud8ef&lt;\/a&gt; - hahaha, maldoso voc&#195;&#170;.\r\n\r\nConcordo que o uso de um bom salt &#195;&#169; essencial e se for complexo o suficiente vai quase imposs&#195;&#173;vel reverter a senha com um hash pr&#195;&#169;-computado.\r\n\r\nEm php eu acho mais interessante um salt hard-coded do que em banco de dados. \r\n\r\nEsta sim &#195;&#169; uma boa abordagem:\r\n\r\n\&quot;Uma abordagem interessante seria armazenar um pre-salt no banco de dados junto com os demais dados do usu&#195;&#161;rio e aplicar um hmac com uma senha contida em arquivo no servidor a esse pre-salt para gerar o salt verdadeiro.\&quot;&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p><a href='#comment-1029' rel="nofollow">@ideud8ef</a> &#8211; hahaha, maldoso você.</p>
<p>Concordo que o uso de um bom salt é essencial e se for complexo o suficiente vai quase impossível reverter a senha com um hash pré-computado.</p>
<p>Em php eu acho mais interessante um salt hard-coded do que em banco de dados. </p>
<p>Esta sim é uma boa abordagem:</p>
<p>&#8220;Uma abordagem interessante seria armazenar um pre-salt no banco de dados junto com os demais dados do usuário e aplicar um hmac com uma senha contida em arquivo no servidor a esse pre-salt para gerar o salt verdadeiro.&#8221;
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1031','Elias Wagner'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1031','Elias Wagner','&lt;a href=\'#comment-1029\' rel=\&quot;nofollow\&quot;&gt;@ideud8ef&lt;\/a&gt; - hahaha, maldoso voc&Atilde;&ordf;.\r\n\r\nConcordo que o uso de um bom salt &Atilde;&copy; essencial e se for complexo o suficiente vai quase imposs&Atilde;&shy;vel reverter a senha com um hash pr&Atilde;&copy;-computado.\r\n\r\nEm php eu acho mais interessante um salt hard-coded do que em banco de dados. \r\n\r\nEsta sim &Atilde;&copy; uma boa abordagem:\r\n\r\n\&quot;Uma abordagem interessante seria armazenar um pre-salt no banco de dados junto com os demais dados do usu&Atilde;&iexcl;rio e aplicar um hmac com uma senha contida em arquivo no servidor a esse pre-salt para gerar o salt verdadeiro.\&quot;'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Elias Wagner</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1030</link>
		<dc:creator>Elias Wagner</dc:creator>
		<pubDate>Sat, 06 Mar 2010 18:07:42 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1030</guid>
		<description></description>
		<content:encoded><![CDATA[<p><a href='#comment-1028' rel="nofollow">@JoÃ£o</a> &#8211; Este é o ponto João, se armazenar o hash em outro local que não seja junto com o hash fica mais difícil de o cara ter acesso a senha. Ter acesso aos dados é problema sério sem dúvida, não estamos discutindo isto. Mas não é porque eu tive acesso ao banco que devo ter acesso a senha, se este for o raciocínio, para que hash? Coloca a seja em texto claro em tão.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1030','Elias Wagner'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1030','Elias Wagner','&lt;a href=\'#comment-1028\' rel=\&quot;nofollow\&quot;&gt;@Jo&Atilde;&Acirc;&pound;o&lt;\/a&gt; - Este &Atilde;&copy; o ponto Jo&Atilde;&pound;o, se armazenar o hash em outro local que n&Atilde;&pound;o seja junto com o hash fica mais dif&Atilde;&shy;cil de o cara ter acesso a senha. Ter acesso aos dados &Atilde;&copy; problema s&Atilde;&copy;rio sem d&Atilde;&ordm;vida, n&Atilde;&pound;o estamos discutindo isto. Mas n&Atilde;&pound;o &Atilde;&copy; porque eu tive acesso ao banco que devo ter acesso a senha, se este for o racioc&Atilde;&shy;nio, para que hash? Coloca a seja em texto claro em t&Atilde;&pound;o.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: ideud8ef</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1029</link>
		<dc:creator>ideud8ef</dc:creator>
		<pubDate>Sat, 06 Mar 2010 17:59:43 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1029</guid>
		<description></description>
		<content:encoded><![CDATA[<blockquote><p><a href='#comment-1026' rel="nofollow">Originally Posted By Elias Wagner</a>Register Globals habilitado realmente é uma falha grave, inclusive as novas versões já vem desabilitada por default. Mas um código deve ser escrito independente das configurações do ambiente.</p></blockquote>
<p>Se eu ainda escrevesse coisas em PHP, não sentiria dó de colocar um if(ini_get(&#8216;register_globals&#8217;)) die(&#8216;Desligue o register_globals seu admin burro&#8217;); no começo de cada arquivo .php <img src='http://wagnerelias.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p>Agora eu discordo que é correto armazenar na mesma tabela junto com o hash, como eu disse um SQLi você pega o hash também</p></blockquote>
<p>Ué, e qual o problema de pegar o hash e o salt com um SQL injection? Se a entropia do salt for boa (salt grande com boa aleatoricidade &#8211; que pode ser gerado com mcrypt por exemplo), a probabilidade de encontrar a senha precomputada é ínfima.</p>
<p>De maneira nenhuma concordo com o texto do seu artigo que diz que uma senha hardcoded é mais segura que uma senha encriptada com esquema de salt só porque ela está em um banco de dados e as estatísticas dizem que ataques SQL injection são mais encontrados que LFI e outros. É preciso utilizar criptografia decente sempre, seja onde a a senha estiver armazenada.</p>
<blockquote><p>O mais adequado nestes casos é armazenar uma string no código ou em um arquivo no server, como o wordpress faz por exemplo. Óbvio que quem configura deve alterar a string padrão.</p></blockquote>
<p>O que você quis dizer com isso? Armazenar um código em um arquivo no servidor e usar como salt? Se for isso, é extremamente inseguro. Um bom salt é um salt aleatório e totalmente independente para cada usuário diferente. Você poderia fazer hash do código do arquivo no servidor com o nome de usuário, mas mesmo assim não seria tão bom quanto um salt aleatório, pois todos os salts estão sendo tirados da mesma função e não são independentes entre si. Formalmente, teríamos uma grande quantidade de informação mútua entre salts diferentes.</p>
<p>Uma abordagem interessante seria armazenar um pre-salt no banco de dados junto com os demais dados do usuário e aplicar um hmac com uma senha contida em arquivo no servidor a esse pre-salt para gerar o salt verdadeiro.</p>
<p>Mas, sinceramente? Acho desnecessário tanta complicação se o salt usado for realmente bom, segundo os critérios que já citei. É mais provável a incidência de uma falha que permita acesso aos arquivos do servidor que a ocorrência de um salt repetido, dependendo do tamanho do salt.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1029','ideud8ef'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1029','ideud8ef','&lt;blockquote&gt;&lt;a href=\'#comment-1026\' rel=\&quot;nofollow\&quot;&gt;Originally Posted By Elias Wagner&lt;\/a&gt;Register Globals habilitado realmente &Atilde;&copy; uma falha grave, inclusive as novas vers&Atilde;&micro;es j&Atilde;&iexcl; vem desabilitada por default. Mas um c&Atilde;&sup3;digo deve ser escrito independente das configura&Atilde;&sect;&Atilde;&micro;es do ambiente.&lt;\/blockquote&gt;\r\n\r\nSe eu ainda escrevesse coisas em PHP, n&Atilde;&pound;o sentiria d&Atilde;&sup3; de colocar um if(ini_get(\'register_globals\')) die(\'Desligue o register_globals seu admin burro\'); no come&Atilde;&sect;o de cada arquivo .php :)\r\n\r\n&lt;blockquote&gt;Agora eu discordo que &Atilde;&copy; correto armazenar na mesma tabela junto com o hash, como eu disse um SQLi voc&Atilde;&ordf; pega o hash tamb&Atilde;&copy;m&lt;\/blockquote&gt;\r\n\r\nU&Atilde;&copy;, e qual o problema de pegar o hash e o salt com um SQL injection? Se a entropia do salt for boa (salt grande com boa aleatoricidade - que pode ser gerado com mcrypt por exemplo), a probabilidade de encontrar a senha precomputada &Atilde;&copy; &Atilde;&shy;nfima.\r\n\r\nDe maneira nenhuma concordo com o texto do seu artigo que diz que uma senha hardcoded &Atilde;&copy; mais segura que uma senha encriptada com esquema de salt s&Atilde;&sup3; porque ela est&Atilde;&iexcl; em um banco de dados e as estat&Atilde;&shy;sticas dizem que ataques SQL injection s&Atilde;&pound;o mais encontrados que LFI e outros. &Atilde; preciso utilizar criptografia decente sempre, seja onde a a senha estiver armazenada.\r\n\r\n&lt;blockquote&gt;O mais adequado nestes casos &Atilde;&copy; armazenar uma string no c&Atilde;&sup3;digo ou em um arquivo no server, como o wordpress faz por exemplo. &Atilde;bvio que quem configura deve alterar a string padr&Atilde;&pound;o.&lt;\/blockquote&gt;\r\n\r\nO que voc&Atilde;&ordf; quis dizer com isso? Armazenar um c&Atilde;&sup3;digo em um arquivo no servidor e usar como salt? Se for isso, &Atilde;&copy; extremamente inseguro. Um bom salt &Atilde;&copy; um salt aleat&Atilde;&sup3;rio e totalmente independente para cada usu&Atilde;&iexcl;rio diferente. Voc&Atilde;&ordf; poderia fazer hash do c&Atilde;&sup3;digo do arquivo no servidor com o nome de usu&Atilde;&iexcl;rio, mas mesmo assim n&Atilde;&pound;o seria t&Atilde;&pound;o bom quanto um salt aleat&Atilde;&sup3;rio, pois todos os salts est&Atilde;&pound;o sendo tirados da mesma fun&Atilde;&sect;&Atilde;&pound;o e n&Atilde;&pound;o s&Atilde;&pound;o independentes entre si. Formalmente, ter&Atilde;&shy;amos uma grande quantidade de informa&Atilde;&sect;&Atilde;&pound;o m&Atilde;&ordm;tua entre salts diferentes.\r\n\r\nUma abordagem interessante seria armazenar um pre-salt no banco de dados junto com os demais dados do usu&Atilde;&iexcl;rio e aplicar um hmac com uma senha contida em arquivo no servidor a esse pre-salt para gerar o salt verdadeiro.\r\n\r\nMas, sinceramente? Acho desnecess&Atilde;&iexcl;rio tanta complica&Atilde;&sect;&Atilde;&pound;o se o salt usado for realmente bom, segundo os crit&Atilde;&copy;rios que j&Atilde;&iexcl; citei. &Atilde; mais prov&Atilde;&iexcl;vel a incid&Atilde;&ordf;ncia de uma falha que permita acesso aos arquivos do servidor que a ocorr&Atilde;&ordf;ncia de um salt repetido, dependendo do tamanho do salt.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: João</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1028</link>
		<dc:creator>João</dc:creator>
		<pubDate>Sat, 06 Mar 2010 17:42:41 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1028</guid>
		<description>Elias, não concordo com a sua afirmação sobre o salt. Inserir o salt juntamente com a senha é uma prática comum. Afinal, se alguém obtém o hash, é porque teve acesso ao banco, e certamente conseguirá obter o salt.&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1028&#039;,&#039;Jo&#195;&#163;o&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1028&#039;,&#039;Jo&#195;&#163;o&#039;,&#039;Elias, n&#195;&#163;o concordo com a sua afirma&#195;&#167;&#195;&#163;o sobre o salt. Inserir o salt juntamente com a senha &#195;&#169; uma pr&#195;&#161;tica comum. Afinal, se algu&#195;&#169;m obt&#195;&#169;m o hash, &#195;&#169; porque teve acesso ao banco, e certamente conseguir&#195;&#161; obter o salt.&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>Elias, não concordo com a sua afirmação sobre o salt. Inserir o salt juntamente com a senha é uma prática comum. Afinal, se alguém obtém o hash, é porque teve acesso ao banco, e certamente conseguirá obter o salt.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1028','Jo&Atilde;&pound;o'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1028','Jo&Atilde;&pound;o','Elias, n&Atilde;&pound;o concordo com a sua afirma&Atilde;&sect;&Atilde;&pound;o sobre o salt. Inserir o salt juntamente com a senha &Atilde;&copy; uma pr&Atilde;&iexcl;tica comum. Afinal, se algu&Atilde;&copy;m obt&Atilde;&copy;m o hash, &Atilde;&copy; porque teve acesso ao banco, e certamente conseguir&Atilde;&iexcl; obter o salt.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Elias Wagner</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1027</link>
		<dc:creator>Elias Wagner</dc:creator>
		<pubDate>Sat, 06 Mar 2010 16:42:04 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1027</guid>
		<description>Nas versões recentes e bem configurado de php não é possível explorar isto, mas como respondi em outro comentário, um código deve ser escrito independente do ambiente e da configuração que ele irá rodar.

Não acho uma boa prática sugerir um variável global em uma situação onde ele só precisa informar o nome do arquivo.

Vou tentar montar o ambiente certo para fazer um exemplo da exploração e publico.&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1027&#039;,&#039;Elias Wagner&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1027&#039;,&#039;Elias Wagner&#039;,&#039;Nas vers&#195;&#181;es recentes e bem configurado de php n&#195;&#163;o &#195;&#169; poss&#195;&#173;vel explorar isto, mas como respondi em outro coment&#195;&#161;rio, um c&#195;&#179;digo deve ser escrito independente do ambiente e da configura&#195;&#167;&#195;&#163;o que ele ir&#195;&#161; rodar.\n\nN&#195;&#163;o acho uma boa pr&#195;&#161;tica sugerir um vari&#195;&#161;vel global em uma situa&#195;&#167;&#195;&#163;o onde ele s&#195;&#179; precisa informar o nome do arquivo.\n\nVou tentar montar o ambiente certo para fazer um exemplo da explora&#195;&#167;&#195;&#163;o e publico.&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>Nas versões recentes e bem configurado de php não é possível explorar isto, mas como respondi em outro comentário, um código deve ser escrito independente do ambiente e da configuração que ele irá rodar.</p>
<p>Não acho uma boa prática sugerir um variável global em uma situação onde ele só precisa informar o nome do arquivo.</p>
<p>Vou tentar montar o ambiente certo para fazer um exemplo da exploração e publico.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1027','Elias Wagner'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1027','Elias Wagner','Nas vers&Atilde;&micro;es recentes e bem configurado de php n&Atilde;&pound;o &Atilde;&copy; poss&Atilde;&shy;vel explorar isto, mas como respondi em outro coment&Atilde;&iexcl;rio, um c&Atilde;&sup3;digo deve ser escrito independente do ambiente e da configura&Atilde;&sect;&Atilde;&pound;o que ele ir&Atilde;&iexcl; rodar.\n\nN&Atilde;&pound;o acho uma boa pr&Atilde;&iexcl;tica sugerir um vari&Atilde;&iexcl;vel global em uma situa&Atilde;&sect;&Atilde;&pound;o onde ele s&Atilde;&sup3; precisa informar o nome do arquivo.\n\nVou tentar montar o ambiente certo para fazer um exemplo da explora&Atilde;&sect;&Atilde;&pound;o e publico.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Elias Wagner</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1026</link>
		<dc:creator>Elias Wagner</dc:creator>
		<pubDate>Sat, 06 Mar 2010 16:32:43 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1026</guid>
		<description></description>
		<content:encoded><![CDATA[<p>Register Globals habilitado realmente é uma falha grave, inclusive as novas versões já vem desabilitada por default. Mas um código deve ser escrito independente das configurações do ambiente.</p>
<p>Para quem acha que não é necessário validar o $_SERVER['SCRIPT_NAME'] segue aqui uma série de falhas explorando SCRIPT_NAME:</p>
<p><a href="http://osvdb.org/show/osvdb/35502" rel="nofollow">http://osvdb.org/show/osvdb/35502</a><br />
<a href="http://drupal.org/node/324875" rel="nofollow">http://drupal.org/node/324875</a><br />
<a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-2431" rel="nofollow">http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-2431</a><br />
<a href="http://www.milw0rm.com/exploits/3816" rel="nofollow">http://www.milw0rm.com/exploits/3816</a><br />
<a href="http://www.derkeiler.com/Mailing-Lists/Full-Disclosure/2010-02/msg00385.html" rel="nofollow">http://www.derkeiler.com/Mailing-Lists/Full-Disclosure/2010-02/msg00385.html</a></p>
<p>Muito gente acha que por ser recomendado o SCRIPT_NAME como opção mais segura para o PHP_SELF ele não deve ser validado e isto é incorreto.</p>
<p>Sobre o Salt, concordo que além de armazenar errado a entropia do Salt é baixa, previsível. Agora eu discordo que é correto armazenar na mesma tabela junto com o hash, como eu disse um SQLi você pega o hash também, por exemplo um SQLi como este: <a href="http://www.otavioribeiro.com/videos/MSSQL.html" rel="nofollow">http://www.otavioribeiro.com/videos/MSSQL.html</a></p>
<p>O mais adequado nestes casos é armazenar uma string no código ou em um arquivo no server, como o wordpress faz por exemplo. Óbvio que quem configura deve alterar a string padrão.</p>
<p>Abs.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1026','Elias Wagner'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1026','Elias Wagner','Register Globals habilitado realmente &Atilde;&copy; uma falha grave, inclusive as novas vers&Atilde;&micro;es j&Atilde;&iexcl; vem desabilitada por default. Mas um c&Atilde;&sup3;digo deve ser escrito independente das configura&Atilde;&sect;&Atilde;&micro;es do ambiente.\n\nPara quem acha que n&Atilde;&pound;o &Atilde;&copy; necess&Atilde;&iexcl;rio validar o $_SERVER&amp;#91;\'SCRIPT_NAME\'&amp;#93; segue aqui uma s&Atilde;&copy;rie de falhas explorando SCRIPT_NAME:\n\nhttp:\/\/osvdb.org\/show\/osvdb\/35502\nhttp:\/\/drupal.org\/node\/324875\nhttp:\/\/web.nvd.nist.gov\/view\/vuln\/detail?vulnId=CVE-2007-2431\nhttp:\/\/www.milw0rm.com\/exploits\/3816\nhttp:\/\/www.derkeiler.com\/Mailing-Lists\/Full-Disclosure\/2010-02\/msg00385.html\n\nMuito gente acha que por ser recomendado o SCRIPT_NAME como op&Atilde;&sect;&Atilde;&pound;o mais segura para o PHP_SELF ele n&Atilde;&pound;o deve ser validado e isto &Atilde;&copy; incorreto.\n\nSobre o Salt, concordo que al&Atilde;&copy;m de armazenar errado a entropia do Salt &Atilde;&copy; baixa, previs&Atilde;&shy;vel. Agora eu discordo que &Atilde;&copy; correto armazenar na mesma tabela junto com o hash, como eu disse um SQLi voc&Atilde;&ordf; pega o hash tamb&Atilde;&copy;m, por exemplo um SQLi como este: http:\/\/www.otavioribeiro.com\/videos\/MSSQL.html\n\nO mais adequado nestes casos &Atilde;&copy; armazenar uma string no c&Atilde;&sup3;digo ou em um arquivo no server, como o wordpress faz por exemplo. &Atilde;bvio que quem configura deve alterar a string padr&Atilde;&pound;o.\n\nAbs.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: ideud8ef</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1025</link>
		<dc:creator>ideud8ef</dc:creator>
		<pubDate>Sat, 06 Mar 2010 16:11:30 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1025</guid>
		<description></description>
		<content:encoded><![CDATA[<p>1) Pessoas que ativam register_globals na configuração do PHP deveriam apanhar. Eu simplesmente faria o meu script não funcionar se essa configuração estivesse ativa, assim os exemplos com $_SERVER do livro não poderiam ser injetados mesmo em versões antigas do PHP.</p>
<p>2) O código de salt do livro não apresenta a vulnerabilidade que você disse. É preciso sim armazenar o salt, todo mundo faz isso. Se você pegar o formato de senha encriptado do /etc/shadow por exemplo, ele vai ter primeiro um identificador do tipo de hash, depois o salt, e depois o hash, concatenados numa mesma string.</p>
<p>O problema no código do livro é outro. O salt é muito previsível, por ser baseado somente no tempo, e isso reduz a complexidade de um ataque por rainbow table, pois é necessário armazenar uma pequena faixa de salts. Se o salt tivesse uma boa aleatoriedade, o espaço de salts possíveis seria bem maior, aumentando a complexidade do ataque.</p>
<p>É claro que é sempre recomendável usar a função crypt do PHP para encriptar senhas, que aliás é capaz de usar hash baseado em blowfish como algoritmo, que é computacionalmente mais complexo que o hash sha1 que ele usou.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1025','ideud8ef'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1025','ideud8ef','1) Pessoas que ativam register_globals na configura&Atilde;&sect;&Atilde;&pound;o do PHP deveriam apanhar. Eu simplesmente faria o meu script n&Atilde;&pound;o funcionar se essa configura&Atilde;&sect;&Atilde;&pound;o estivesse ativa, assim os exemplos com $_SERVER do livro n&Atilde;&pound;o poderiam ser injetados mesmo em vers&Atilde;&micro;es antigas do PHP.\r\n\r\n2) O c&Atilde;&sup3;digo de salt do livro n&Atilde;&pound;o apresenta a vulnerabilidade que voc&Atilde;&ordf; disse. &Atilde; preciso sim armazenar o salt, todo mundo faz isso. Se voc&Atilde;&ordf; pegar o formato de senha encriptado do \/etc\/shadow por exemplo, ele vai ter primeiro um identificador do tipo de hash, depois o salt, e depois o hash, concatenados numa mesma string.\r\n\r\nO problema no c&Atilde;&sup3;digo do livro &Atilde;&copy; outro. O salt &Atilde;&copy; muito previs&Atilde;&shy;vel, por ser baseado somente no tempo, e isso reduz a complexidade de um ataque por rainbow table, pois &Atilde;&copy; necess&Atilde;&iexcl;rio armazenar uma pequena faixa de salts. Se o salt tivesse uma boa aleatoriedade, o espa&Atilde;&sect;o de salts poss&Atilde;&shy;veis seria bem maior, aumentando a complexidade do ataque.\r\n\r\n&Atilde; claro que &Atilde;&copy; sempre recomend&Atilde;&iexcl;vel usar a fun&Atilde;&sect;&Atilde;&pound;o crypt do PHP para encriptar senhas, que ali&Atilde;&iexcl;s &Atilde;&copy; capaz de usar hash baseado em blowfish como algoritmo, que &Atilde;&copy; computacionalmente mais complexo que o hash sha1 que ele usou.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vinícius Sant'anna</title>
		<link>http://wagnerelias.com/2010/03/04/php-security-nem-tudo-que-e-publicado-deve-ser-seguido/comment-page-1/#comment-1024</link>
		<dc:creator>Vinícius Sant'anna</dc:creator>
		<pubDate>Sat, 06 Mar 2010 14:10:06 +0000</pubDate>
		<guid isPermaLink="false">http://wagnerelias.com/?p=692#comment-1024</guid>
		<description>ótimo post, porém infeliz os autores desse livro.&lt;div class=&quot;comment-remix-meta&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;replyto&quot; onclick=&quot;replyto(&#039;1024&#039;,&#039;Vin&#195;&#173;cius Sant\&#039;anna&#039;); return false;&quot;&gt;Reply&lt;/a&gt;  - &lt;a href=&quot;#&quot; class=&quot;quote&quot; onclick=&quot;quote(&#039;1024&#039;,&#039;Vin&#195;&#173;cius Sant\&#039;anna&#039;,&#039;&#195;&#179;timo post, por&#195;&#169;m infeliz os autores desse livro.&#039;); return false;&quot;&gt;Quote&lt;/a&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>ótimo post, porém infeliz os autores desse livro.
<div class="comment-remix-meta"><a href="#" class="replyto" onclick="replyto('1024','Vin&Atilde;&shy;cius Sant\'anna'); return false;">Reply</a>  &#8211; <a href="#" class="quote" onclick="quote('1024','Vin&Atilde;&shy;cius Sant\'anna','&Atilde;&sup3;timo post, por&Atilde;&copy;m infeliz os autores desse livro.'); return false;">Quote</a></div>
]]></content:encoded>
	</item>
</channel>
</rss>

