@seredaes

Как защититься от SQL Injection?

Привет ребята. Есть страницка, куда передаются GET параметры.
Дальше они парсятся, подготавливаются как переменные, строковые, и подставляются в БД.
Кто-то умный наставил туда

...111%27%20UNION%20SELECT%20CONCAT(CHAR(91,88,93),count(*),CHAR(91,88,93))%20FROM%20...

Используется mysql (т.е. deprecated version :< )
также для каждой переменной был применен mysql_real_escape_string

Задача. Как из параметра удалить все операторы SQL?
Как-то preg_replace, str_replace.
Или может быть есть более изящное решение?

Т.е. вопрос не столько в защите от удаления чего-то, а чтобы остался красивый текст, а все ключевые слова SQL были удалены!
  • Вопрос задан
  • 408 просмотров
Решения вопроса 2
@BPOH
Сисадмин-любитель
Быстрые рекомендации.
Для предотвращения SQL инъекций следует соблюдать два простых правила:
1. Не помещать в БД данные без обработки.
Это можно сделать либо с помощью подготовленных выражений, либо обрабатывая параметры вручную.
Если запрос оставляется вручную, то
- все числовые параметры должны быть приведены к нужному типу
- все остальные параметры должны быть обработаны функцией mysql_real_escape_string() и заключены в кавычки.

2. Не помещать в запрос управляющие структуры и идентификаторы, введенные пользователем.
А заранее прописывать в скрипте список возможных вариантов, и выбирать только из них.

Два важных дополнения:
1. Используя изложенную в этой статье информацию, я написал Класс для безопасной и удобной работы с MySQL, который делает запросы безопасными и сокращает код в несколько раз.
2. Если вы не любите сторонние библиотеки, то пользуйтесь хотя бы PDO. Как работать с PDO? Полное руководство.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Здесь описаны фильтры для защиты от SQL-инъекций.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽