К списку форумов К списку вопросов
Откуда берутся лишние символы? (PHP)
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() исчез! Еще раз спасибо!

К списку вопросов на форуме Веб-дизайн

>>