Показать полную графическую версию : Безопасность в PHP
Вопрос в следующем, как защититься от добавления пользователем в форму спец. символов, например ",',<,> и т.д.
А то можно бед наделать вот например что-то вроде '; drop table table;
Как с этим бороться. Есть идея просто заменять опасные символы:
$a = ereg_replace("<","&lt;",$a);
$a = ereg_replace(">","&gt;",$a);
Но как представлю сколько у меня переменных аж плохо становится, да и как поступать с кавычками ведь $a = ereg_replace(""","/'",$a); боюсь не прокатит.
knife
а если так?:
if ( ereg ( "[<>&]+", $GLOBALS["form"]["имя формы"], $error_1 ) )
* *{
* * * *$error[0] .= $html.'( <FONT COLOR=какой-то>'.htmlspecialchars($error_1[0]).'</FONT> )<BR>';
* * * *$error[1] = 1;
* *}
return $error;
ну и предварительно описать эти эроры...
Prisoner
13-02-2004, 17:24
Бороться с кавычками поможет функция addslashes (Возвращает строку со слэшами перед символами, которые должны быть закавычены в запросах БД и т.п.. Это одинарная ('), и двойная (") кавычки, обратный слэш/backslash (\)и NUL (NULL-байт)) и ее аналог addсslashes (тут стоит почитать мануалы, там фишки свои).
можно проверять тип приходящих данных - is_тип или насильно устанавливать тип - settype.
Можно создать ассоциативный массив в виде опасный_символ(ы)=>безопасный_символ(ы) и в цикле пройтись по данным функцией str_replace.
Ну и конечно регулярные выражения как на проверку так и на конвертирование.
Все вышеперечисленное не претендует на панацею :).
Prisoner
Да, слышал об этих функциях, но к сожалению они не заменяют знаки html разметки, а это мне тоже необходимо.
Blast
А что так сложно, но за подсказку ф-ии htmlspecialchars() спасибо. Почитал о ней, оказалось с параметром ENT_QUOTES заменяет все кавычки, а также < & и >. Вопрос в следующем, достаточно ли замены этих спец. символов чтобы себя обезопасить?
Prisoner
17-02-2004, 22:23
знаки html разметки
А что подразумевается под этим термином?
достаточно ли замены этих спец. символов чтобы себя обезопасить?
Нет :). Стопроцентной защиты никогда не будет. Стоит фильровать также точку с запятой, а строковые данные sql запросов при инсертах и прочем заключать в кавычки. Также стоит ловить символ "#" - комментарий в sql дабы не получить по носу когда будет выполнена лишь ЧАСТЬ запроса. В общем стоит почитать (мне тоже - забыл все :() синтаксис команд sql и поглядеть на камни под водой :).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.