<div dir="ltr"><p>Eu aki mexendo nuns codigos antigos achei um BUG no CGI, a funcao unescape que substitui + por ' ' 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 '+' em valores tratados por ele.<br>
</p><p>--------------------------------------------------------------------------------------------------------------------------------------</p><p><strong>CGI.pm 3.42 </strong> <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->{'.cookies'} = CGI::Cookie->fetch<br>2783: unless $self->{'.cookies'};</p><p></p><p></p><p><strong>CGI::Cookie 1.29 </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; ## apenas pega o cookie | sub fetch<br>43: return $class->parse($raw_cookie); ## faz o parse do cookie | sub fetch</p><p></p><p>101: @values = map unescape($_),split(/[&;]/,$value.'&dmy'); ## 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: $todecode =~ tr/+/ /; # pluses become spaces</p>
<p>--------------------------------------------------------------------------------------------------------------------------------------</p><p></p><p>Isso eh suficiente pra grarantir que o valor do cookie nao pode ter '+', 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>