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