- 1
- 2
if ( $src =~ /^(.+)$/ ) { $src = "$1"; }
if ( $dst =~ /^(.+)$/ ) { $dst = "$1"; }
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−117
if ( $src =~ /^(.+)$/ ) { $src = "$1"; }
if ( $dst =~ /^(.+)$/ ) { $dst = "$1"; }
Еще один вариант проверки на непустую строку.
http://perldoc.perl.org/perlsec.html , цитирую:
Taint mode
While in this mode, Perl takes special precautions called taint checks to prevent both obvious and subtle traps. Some of these checks are reasonably simple, such as verifying that path directories aren't writable by others; careful programmers have always used checks like these. Other checks, however, are best supported by the language itself, and it is these checks especially that contribute to making a set-id Perl program more secure than the corresponding C program.
вобщем, в это режиме перл помечает все данные которые приходят из внешних источников специальным флагом, и пока код их не "почистит", при попытке использования этих данных, перл обломит выдаст ворнинг и может быть даже остановит исполнение.
популярно для CGI & setuid скриптов - что бы не забывать ввод от пользователя проверять.
может быть, это паранойя, но если программа не проверит, что это действительно нечто похожее на md5 - то ей можно подать на вход и не md5, а все, что захочешь (подменив источник) - уязвимость налицо.
ЗЫ что бы /usr/bin/md5 подменить, надо рутом быть. а если уже кто-то имеет рута, то зачем страдать херней с подменой md5?
у нас есть step1.pl, который обрабатывает данные и вызывает step2.pl, передавая данные для вывода. Если мы можем вызвать step1.pl, то можем вызвать и step2.pl c произвольными данными, и если step2.pl не проверит их корректность, то.......
напротив, если мы в ООП обьекте имеем два приватных метода, то будет излишеством, если каждый из них будет проверять, а не передал ли какой нибудь из них неочищенные данные.....
например, если в $md5 мы ждем только md5-хеш, то вместо сабжевого if ( $md5 =~ /^(.+)$/ ) { $md5 = "$1"; }, который вы взялись защищать, можно написать хотя бы if ( $md5 =~ /^\w+$/i ) { $md5 = "$0"; } else { $md5 = ""; }
и на закуску предлагаю раскурить http://gunther.web66.com/FAQS/taintmode.html#clear_taint
внушаит! LOL
в безопастности данных есть такое высказывание: "I'm paranoid. But am I paranoid enough?"