![]() |
![]() |
LaidBack 19.03.2004 - 09:18 |
Пишу в форме SQL запрос: UPDATE `dg_forum` SET `lang`='eng' после чего передаю этот текст в функцию, которая должна выполнить этот скрипт, но глобальная переменная содержит уже другой текст и запрос не выполняется: UPDATE `dg_forum` SET `lang`=\'eng\' Что это за появившиеся символы (\'eng\')? Как от них избавиться? Спасибо! |
DIVЕR 1 - 19.03.2004 - 09:27 |
Это результат работы опции magic_quotes (в php.ini). При этом добавляются символы \, чтобы кавычки и апострофы трактовались именно как кавычки и апострофы; если бы не эта оцпия, то был бы возможен взлом методом sql-injection, когда ты вместо пароля пишешь например ' OR '1'='1' и попадаешь в систему не зная правильный пароль. Вохможно, это неудачный пример, но я о принципе работы говорю =))) Избавиться (что-нибудь одно): 1. Отключить опцию magic_quotes в файле php.ini 2. Пользоваться функцией stripslashes( string ), которая убирает только _лишние_ символы \. Также пользоваться функцией addslashes( ) для добавления подобных "безопасных" символов \ (в общем, слэшей =) ). |
Mips 2 - 19.03.2004 - 10:32 |
ага, stripslashes() поможет. только не выкладывай эту форму для запроса на всеобщее обозрение - натворят "добрых" дел "добрые" люди :) Вход на форму надо сделать по паролю или хотя бы добавь ещё одно поле "password" и при выполнении введённого SQL-запроса проверяй этот пароль. |
LaidBack 3 - 19.03.2004 - 12:14 |
Спасибо! StripSplashes() то, что нужно! Эта форма доступна только администратору после ввода имени и пароля. Просто раньше не догонял, почему некоторые запросы выполняются, а другие, тоже правильные - нет! Сегодня обнаружил вышеописанный баг, который после обработки запроса stripsplashes() исчез! Еще раз спасибо! |