Обработка HTML формы в PHP 


Обработка HTML формы в PHP

Опубликовано

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

Пусть дана элементарная форма, отправляющая данные методом POST

<form name="Form1" method="POST">
<input type="text" name="text">
<input type="submit" name="Submit">
</form>

А также PHP скрипт обрабатывающий данные, получаемые от вышеуказанной формы.

<?php
Print $_POST["text"];
?>

Введем в поле “text” запись: <script>alert("][ak")</script>, и посмотрим, что произойдет в ситуациях, с правильной обработкой данных полученных от пользователя и без нее.

Для начала выведем полученные данные без обработки:

Вывод данных формы, без обработки.

Рис1. Вывод данных формы, без обработки

Как видно из рисунка скрипт успешно выполнен, безопасность равна нулю, сайт подвержен угрозам хакерской атаки. Чтобы этого избежать, необходимо применить нижеследующие функции.

Обработка текста формы

Функция strip_tags() удаляет все теги, содержащиеся в переменной, после ее работы получаем чистый текст.

Print strip_tags ($_POST[‘text’]);

Применение к данным функции strip_tags

Результат выполнения функции strip_tags, удаление тегов.

Рис2. Результат выполнения функции strip_tags,  удаление тегов.

Однако что если необходимо сохранить теги как обычный текс, в этом случае вместо strip_tags(), необходимо использовать другую функцию htmlspecialchars(text, ENT_QUOTES). Принцип ее действия заключается в замене специальных символов на HTML-сущности

Print htmlspecialchars ($_POST[‘text’] , ENT_QUOTES);

Результат выполнения функции htmlspecialchars, замена специальных символов

Рис3. Результат выполнения функции htmlspecialchars, замена специальных символов

Стоит заметить, что при добавлении текста в базу данных, к примеру MySQL, нужно обязательно экранировать одинарные и двойные кавычки, в противном случае можно нарваться на SQL Injection.

Если для фильтрования текста вы использовали функцию strip_tags() (с функцией htmlspecialchars(), таких проблем нет), то обязательно нужно выполнить экранирование кавычек с помощью функции addslashes() на PHP (либо с помощью функции аналогичного действия для MYSQL: mysql_real_escape_string()), она поставит перед каждой кавычкой обратный слеш “”. Когда вы будете выводить текс из базы, не забудьте удалить экранированные слеши функцией stripcslashes().

Print addslashes(strip_tags($_POST[‘text’]));

Результат совместного выполнения функций strip_tags и addslashes

Рис4. Результат совместного выполнения функций strip_tags и addslashes.

Отработка чисел формы

Если данные приходят к вам в числовом формате, то для для целых чисел используйте функцию intval(), для дробных (double)()

Print intval ($_POST[‘text’]);
Print (double) ($_POST[‘text’]);
 

Подведем итоги

• Удаляете, все теги и экранируйте кавычки с помощью addslashes(strip_tags($_POST[‘text’]));

или

• Заменяйте все специальные символы на HTML- сущности с помощью htmlspecialchars ($_POST[‘text’] , ENT_QUOTES);, экранирование не требуется

• Целые числа, приводите к типу intval ($_POST[‘text’]);

• Дробные числа приводите к типу (double) ($_POST[‘text’]);