Как грамотно защититься от SQL injection

12 3
SE
На сайте с 11.02.2007
Offline
13
2940

Как грамотно защититься от SQL injection?

Может кто поделиться своими мыслями

Обмен ссылками Авто-Мото, Пишу PHP скрипты любой сложности, Продажа Запчастей на Японские Авто и Спецтехнику
I
На сайте с 11.01.2007
Offline
16
Irh
#1

Например:

1:

$sql_inj = array("'", ";", "/**/", "/UNION/", "/SELECT/", "AS ", "EVAL","<?",'"',"$",'..');

foreach($sql_inj as $res)

{

if(stristr($_SERVER['QUERY_STRING'], $res)) die("SQL-inj....");

}

2.

Фильтровать все данные вводимые через формы.

SE
На сайте с 11.02.2007
Offline
13
#2
Irh:
$sql_inj = array("'", ";", "/**/", "/UNION/", "/SELECT/", "AS ", "EVAL","<?",'"',"$",'..');

Помоему вы забыли отфильтровать ( и ) вом не кажеться ?

T
На сайте с 11.08.2005
Offline
181
#3

Контролировать макс. длинну значения, что ввел пользователь. Явно отрезать все лишнее функцией substr, например $q=substr($q, 0, 64);

Все текстовые запросы (ключевые слова для поиска), если такое допустимо, пропускать через функцию htmlspecialchars, например $q=htmlspecialchars($q);.

или

Вырезать все символы кроме буквенных, например:

$q=preg_replace("/[^\w\x7F-\xFF\s]/", " ", $q);

Все числовые переменные явно преобразовывайте в число, например $page=(int)$page;

Не стоит недооценивать пользователей и забывать о числовых переменных.

Этого должно хватить, чтобы защититься от большинства пакостей, что могут преподнести пользователи.

T
На сайте с 11.08.2005
Offline
181
#4
$sql_inj = array("'", ";", "/**/", "/UNION/", "/SELECT/", "AS ", "EVAL","<?",'"',"$",'..');

Вы еще про DELETE забыли...

Y
На сайте с 02.01.2006
Offline
138
#5

Irh, Вы чего-нибудь толковое почитайте на этот счет, чтобы людей не деизнформировать ;)

Timen, то же самое

SE
На сайте с 11.02.2007
Offline
13
#6
Timen:
или
Вырезать все символы кроме буквенных, например:
$q=preg_replace("/[^\w\x7F-\xFF\s]/", " ", $q);

Наверно проще не вырезать все а пускать только то, что нужно..

Ну есть ситуации когда пользователь вообще ничего не вводит как быть тогда ???

SE
На сайте с 11.02.2007
Offline
13
#7
S.E.O:
Вы чего-нибудь толковое почитайте на этот счет, чтобы людей не деизнформировать

Простите а вы чего нибудь добавите ?

T
На сайте с 11.08.2005
Offline
181
#8
S.E.O:
Наверно проще не вырезать все а пускать только то, что нужно..
Ну есть ситуации когда пользователь вообще ничего не вводит как быть тогда ???

Да, я неправильно выразился. После отработки указаной ф-и останутся только допустимые символы.

У сайта есть параметры (явные переменные), что передаются в url строке, например site.com/?a=1&b=2. ?

Y
На сайте с 02.01.2006
Offline
138
#9
S.E.O:
Простите а вы чего нибудь добавите ?

http://phpfaq.ru/slashes

T
На сайте с 11.08.2005
Offline
181
#10
Yukko:
Irh, Вы чего-нибудь толковое почитайте на этот счет, чтобы людей не деизнформировать ;)
Timen, то же самое

Я сам использую предложенный мной вариант и мои сайты не ломали ни разу.

Конечно же, я буду очень признателен за ссылку(и) на статьи или доки по теме или просто рекомендации.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий