|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 02 Mar 2005 15:12:19 To : Yury Yurevich Subject : Re: Кавычки в тексте... :( -------------------------------------------------------------------------------- Yury Yurevich -> Alex Zaitsev @ Wed, 2 Mar 2005 04:43:51 +0000 (UTC): YY> Alex Zaitsev пишет: YY> ... >> Т.е. в данном случае в $text было >> Let's so wrong Mikey... >> кавычка из которого и послужила "палкой в колесо"... YY> Дыра для классического SQL injection. >> Подскажите, плз, как обойти енти баги? YY> Экранировать символы ' " -- ; YY> Пару примеров от Stas Bekman YY> (http://perl.apache.org/docs/1.0/guide/code/My-DB.pm): YY> # Quote the list of parameters. Parameters consisting entirely of YY> # digits (i.e. integers) are unquoted. YY> # print sql_quote("one",2,"three"); => 'one', 2, 'three' YY> ############# YY> sub sql_quote{ map{ /^(\d+|NULL)$/ ? $_ : "\'$_\'" } @_ } От "Let's so wrong Mikey" напрочь не спасает. Справа от : должно стоять $db->quote($_), если уж на то пошло. Вместе с sql_escape, будучи употреблено в правильной последовательности (последовательность ты, заметим, не привел), поначалу работает... YY> # Escape the list of parameters (all unsafe chars like ",' are escaped) YY> # We make a copy of @_ since we might try to change the passed values, YY> # producing an error when modification of a read-only value is attempted YY> ############## YY> sub sql_escape{ my @a = @_; map { s/([\'\\])/\\$1/g;$_} @a } ... а потом попадается SQL-сервер с чуть более другим синтаксисом (в первую очередь - более широким набором служебных символов). -- Artem Chuprina RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/25606ae3d7962.html, оценка из 5, голосов 10
|