|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Ivan Frolcov 2:5020/175.2 18 Aug 2004 16:02:47 To : Alexey Gradovtsev Subject : Динамическое построение таблиц -------------------------------------------------------------------------------- Wed Aug 18 2004 15:19, Alexey Gradovtsev wrote to Justin Finch-Fletchley: AG> А и не надо кодировать (вернее, ескейпить) ; - это нормальный символ для AG> текстовой строки. Hадо исключить спецсимволы (', ", \). Это убережет от AG> самой возможности SQL-инъекции. Т.е. левых данных, подставляемых AG> кульхацкерами вместо того, что ты ожидаешь получить. AG> Пример. AG> $query = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';"; AG> Если $uid такой: ' or uid like'%admin%'; -- AG> то при $pwd == 'hehehe' запрос станет таким: AG> $query = "UPDATE usertable SET pwd='hehehe' WHERE uid='' or uid like AG> '%admin%'; --'"; AG> (все что после -- является комментарием и не рассматривается) AG> А замена ' на \' сделает запрос безопасным: AG> $query = "UPDATE usertable SET pwd='hehehe' WHERE uid='\' or uid like AG> \'%admin%\'; --'"; AG> (т.е. в базе будет искаться строка: ' or uid like'%admin%'; --) AG> quote AG> Quote a string literal for use as a literal value in an SQL statement, by AG> escaping any special characters (such as quotation marks) contained AG> within the string and adding the required type of outer quotation marks. AG> Впрочем, ескейпинг защитит не только от инъекции, но и от элементарных AG> ошибок в данных. Случайно затесавшийся символ кавычки ', если его не AG> ескейпить в \', приведет к ошибке в SQL-запросе. AG> А подробно про SQL-инъекции читай здесь: AG> http://www.php.net/manual/ru/security.database.php Мне тут как-то статья попалась, в которой автор рассказывал, как с помощью влазания в недра эктивстейтовских дллей можно оторвать от перла пайпы в open. Я, признаться, был сильно удивлен тем, что многим проще сделать сложнее, чем прочитать документацию. AG> Пример. AG> $query = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';"; Я бы написал $dbh->do('update usertable set pwd=? where uid=?',undef,$pwd, $uid); Может, кто помнит реакцию на книгу Горького "Мать"? "Все беды Максима были от того, что он не пил водку"... т.е. в данном случае не читал документацию. --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/330048d159f0.html, оценка из 5, голосов 10
|