Аналог этой функции на Perl - функция md5_hex (а не md5, как могло бы показаться). Пример их совместного использования:
**** script.pl ****
use CGI; use Digest::MD5 qw(md5_hex); my $SECRET = "james bond 007"; my $signed_value = "значение, которое пользователю нельзя дать подменить"; my $signature = md5_hex($SECRET . "|" . $signed_value);
# Пользователь переадресуется со страницы на Perl на страницу на Парсере: print $cgi->redirect('http://example.com/parser.html?signed_value=' . uri_escape($signed_value) . '&signature=' . $signature ');
**** parser.html ****
$SECRET[james bond 007] ^if( ^math:md5[$SECRET|$form:signed_value] eq $form:signature ){ $form:signed_value в порядке }{ Редиска-хакер попытался подделать $form:signed_value !!! }
***********
Заметьте, $SECRET не передаётся между страницами - посетителю сайта негде его подсмотреть.
Внимание! Не забудьте, если требуется, вставить в $signature IP-адрес посетителя, значение его $env:USER_AGENT и текущие дату и время (UNIX timestamp). Если они изменились или прошло слишком много времени между обращением к perl-скрипту и странице на parser - это признак мошенничества.
|