<div dir="ltr"><p>Eu aki mexendo nuns codigos antigos achei um BUG no CGI, a funcao unescape que substitui + por &#39; &#39; dos valores GET (teste.cgi?nome=joao+mendes) tambem é processada no valor do Cookie, isso significa que usando CGI eh bom tomar cuidado com os &#39;+&#39; em valores tratados por ele.<br>
</p><p>--------------------------------------------------------------------------------------------------------------------------------------</p><p><strong>CGI.pm 3.42 </strong>&nbsp;<a href="http://search.cpan.org/~lds/CGI.pm-3.42/CGI.pm">http://search.cpan.org/~lds/CGI.pm-3.42/CGI.pm</a></p>
<p>2782: $self-&gt;{&#39;.cookies&#39;} = CGI::Cookie-&gt;fetch<br>2783:&nbsp;    unless $self-&gt;{&#39;.cookies&#39;};</p><p></p><p></p><p><strong>CGI::Cookie 1.29 &nbsp;</strong><a href="http://search.cpan.org/~lds/CGI.pm-3.42/CGI/Cookie.pm">http://search.cpan.org/~lds/CGI.pm-3.42/CGI/Cookie.pm</a></p>
<p>42: my $raw_cookie = get_raw_cookie(@_) or return; &nbsp; &nbsp;## apenas pega o &nbsp;cookie | sub fetch<br>43:&nbsp;   return $class-&gt;parse($raw_cookie); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ## faz o parse do cookie &nbsp; | sub fetch</p><p></p><p>101: @values = map unescape($_),split(/[&amp;;]/,$value.&#39;&amp;dmy&#39;); &nbsp;## A funcao unescape vem de CGI::Util::unescape | sub parse</p>
<p></p><p></p><p><strong>CGI::Util 1.5_01 </strong><a href="http://search.cpan.org/~lds/CGI.pm-3.42/CGI/Util.pm">http://search.cpan.org/~lds/CGI.pm-3.42/CGI/Util.pm</a></p><p>212: &nbsp;$todecode =~ tr/+/ /;       # pluses become spaces</p>
<p>--------------------------------------------------------------------------------------------------------------------------------------</p><p></p><p>Isso eh suficiente pra grarantir que o valor do cookie nao pode ter &#39;+&#39;, algoritmos de criptografia como Digest::MD5::md5_base64 (<a href="http://search.cpan.org/~gaas/Digest-MD5-2.36/MD5.pm#FUNCTIONS">http://search.cpan.org/~gaas/Digest-MD5-2.36/MD5.pm#FUNCTIONS</a>) utiliza esse caracter.</p>
</div>