@Mikhail555

Когда и как необходимо проверять данные на php?

Данные приходят с сайта. Когда стоит их проверить, до условия об их существовании или после?
Что будет если я напишу условие:
if ($_POST['test']) {
      // проверка данных и какие - то действия
}

Не повредят ли не проверенные данные в этом случае?

И что если производить проверку, без встроенных функций php, а например убрать из данных все кавычки и остальные мета-символы, или заменить кавычки на экранированные, проверить данные на ключевые слова, используемые sql запросах?
  • Вопрос задан
  • 2567 просмотров
Решения вопроса 1
- Данные проверяем на существования вначале.
- Затем проверяем данные которые имеют "белые списки" на соответствие им.
- Затем числовые данные проверяем на соответствие типов.
- Затем проверяем размерность числовых данных.
- Затем проверяем текстовые данные на размерность (если необходимо).
- Затем проверяем текстовые данные на наличие в них опасных слов (script|location|cookie|SELECT|UNION|UPDATE|exec|INSERT|tmp и т.д.).
- Затем проверяем данные на количество знаков "%". Если знаков % больше 10, то возможно это инъекция через метасимволы.
- Затем очищаем данные от крайних пробелов.
- Затем проверяем данные на пустоту (''). Если необходимо присваиваем значение по умолчанию.
- Затем проверки согласно алгоритмам.
- Затем вставка в БД с экранированием или "подготовленными предложениями" (PDO).

Теоретически такую защиту можно обойти, но надо быть гением с даром предвидения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@cloud-habr
конечно сначала проверяйте пришли ли данные вообще!
if (isset($_POST['test'])) {
      // проверка данных по шаблону
     //фильтрация данных
     // составления запроса
     // и т. д. 
}
Ответ написан
Комментировать
Dimitriys
@Dimitriys
вам уже писали как проверить существование переменной через isset($_POST['test']) и если переменной не существует, подставить значение по-умолчанию.
По второму вопросу, не надо изобретать велосипед и вручную заменять и экранировать все символы. Поверьте, встроенные функции экранирования предусмотрели куда больше вариантов, чем замените вы через str_replace.
Ответ написан
@Mikhail555 Автор вопроса
Это то понятно, что данные не используются без проверки... что будет, если я сначала проверю их наличие а потом отфильтрую?!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы