Dagdamor а "--"? или /* надо юзать то, что предоставляет интерфейс самой базы, а не юзать самопал. не имхо
Dagdamor во-во! Начнем с того, хотя бы, что для использования mysql_escape_string нужно уже установить соединение с базой. Да и писать название этой функции дольше . Klin, если уж так хочешь, раскомментируй тут mysql_real_escape_string и закомментируй addslashes.
Dagdamor строка - набор символов. от юзера пришли данные в виде строки, в ней может быть все что угодно. эти данные используются в запросе (ну например логин осуществляется). не понимаю удивления
antonn Раз не понимаешь, тогда тот же вопрос, что и к Олегу. Приведи пример работающей SQL-инъекции для данных, обработанных addslashes() перед подстановкой в запрос: PHP: <?php $string="Что угодно"; // Здесь можете написать все, что хотите $escaped=addslashes($string); $query="SELECT * FROM mytable WHERE strfield='$escaped'"; mysql_query($query); // Здесь должна быть инъекция
Код (Text): $user_val="0 UPDATE fusion_users SET user_level=100 WHERE user_id=1--"; $user_val=addslashes($user_val); $text="SELECT * FROM users WHERE user_id=$user_val and user_level=101"; echo $text; ?
antonn А обрамлять одинарными кавычками переменную кто будет? Смотри мой шаблон внимательнее. Подставлять переменную в запрос НЕ в контексте строки, без предварительного жесткого приведения к целочисленному или плавающему типу - самоубийство. Тут тебя никакой mysql_real_escape_string не спасет.
когда появится набор символов означающий нечто непредвиденное сейчас - кто с addslashes будет впухать? ЗЫ я запостил когда твоего поста не видел.
antonn Если такое случится - mysql_real_escape_string нагнется с тем же успехом, ведь эта функция не приводит к дополнительному запросу к SQL серверу, она, как и addslashes, отрабатывает локально, в контексте процесса PHP, и о будущих изменениях в парсере MySQL она знать никак не может. Да и сомневаюсь я, что парсер запросов будут менять на таком низком уровне, на уровне парсинга строк. Такую поломку BC можно только спьяну устроить...
может, ибо завязана на libmysql.dll, который, должен братся от установленной версии Мускула, если вебсервер корректно настроен.
Все функции, начинающиеся с mysql_ берутся из мускульной библиотеки, и точно так же все функции для работы с разными подключаемыми модулями.
Для китайцев PHP: <?php $str = "\xbf\x27 OR 1=1 LIMIT 10/*"; mysql_connect('localhost', 'root', ''); mysql_select_db('test'); mysql_query('SET NAMES \'GBK\''); $query = 'SELECT * FROM items WHERE item_id=\'' . addslashes($str) . '\''; $res = mysql_query($query) or die(mysql_error()); while ($row = mysql_fetch_assoc($res)) { print_r($row); } Сам факт этой ошибки хоть на китайской кодировке уже против этой функции.