Проверка PHP-форм
- Предыдущая страница Обработка форм PHP
- Следующая страница Обязательные поля PHP
Этот раздел и следующий объясняют, как использовать PHP для проверки данных форм.
Проверка PHP-форм
Совет:При обработке PHP-форм уделяйте внимание безопасности!
Эти страницы покажут, как безопасно обрабатывать PHP-формы. Примерное проверка данных HTML-формы важно для предотвращения атак хакеров и спама!
HTML-формы, которые мы будем использовать позже, содержат различные поля ввода: обязательные и опциональные текстовые поля, переключатели и кнопку отправки:
Приведенная выше форма использует следующие правила проверки:
Поле | Правила проверки |
---|---|
Имя | Обязательное. Должно содержать буквы и пробелы. |
Электронная почта | Обязательное. Должно содержатьvalid email address (содержит @ и .). |
Веб-сайт | Опциональное. Если заполнено, то он должен содержатьvalid URL. |
Комментарий | Опциональное. Многострочный ввод (текстовое поле). |
Gender | Обязательное. Необходимо выбрать один вариант. |
Сначала давайте посмотрим на чистый HTML-код этой формы:
Текстовые поля
Поля name, email и website относятся к текстовым полям ввода, поле comment представляет собой текстовое поле. HTML-код такой:
Имя: <input type="text" name="name"> Электронная почта: <input type="text" name="email"> Веб-сайт: <input type="text" name="website"> Комментарий: <textarea name="comment" rows="5" cols="40"></textarea>
Переключатели
Поле gender представляет собой переключатель, HTML-код такой:
Gender: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male
Элементы формы
HTML-код формы такой:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
При отправке этой формы данные формы отправляются через method="post".
Что такое переменная $_SERVER["PHP_SELF"]?
$_SERVER["PHP_SELF"] является супер глобальной переменной, которая возвращает имя файла текущего выполняемого скрипта.
Таким образом, $_SERVER["PHP_SELF"] отправляет данные формы на саму страницу, а не переходит на другую страницу. Таким образом, пользователь может получить информацию об ошибке на странице формы.
Что такое функция htmlspecialchars()?
Функция htmlspecialchars() преобразует специальные символы в HTML-сущности. Это означает, что символы < и > будут заменены на < и >. Таким образом, можно предотвратить атаку хакеров, которые могут использовать HTML или JavaScript-код (атаки XSS) для внедрения кода.
Важные советы по безопасности PHP форм
Переменная $_SERVER["PHP_SELF"] может быть использована хакерами!
Если ваша страница использует PHP_SELF, пользователь может ввести знак подчеркивания и выполнить кросс-сайтовый скрипт (XSS).
Совет:Cross-site scripting (XSS) - это тип уязвимости в компьютерной безопасности, часто встречающийся в веб-приложениях. XSS позволяет атакующему вводить клиентские скрипты в веб-страницы, просматриваемые другими пользователями.
Предположим, что у нас есть страница с именем "test_form.php", на которой есть следующий формуляр:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Теперь, если пользователь зашел по обычному URL в адресной строке: "http://www.example.com/test_form.php",上面的 код будет преобразован в:
<form method="post" action="test_form.php">
До сих пор все в порядке.
Однако, если пользователь в адресной строке ввели следующий URL:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
В этом случае,上面的代码 будет преобразовано в:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
Этот код добавляет скрипт и команду подсказки. И когда страница загружается, JavaScript-код будет выполнен (пользователь увидит всплывающее окно). Это всего лишь простый и безвредный пример того, как используется переменная PHP_SELF.
Вы должны осознавать Тег <script> позволяет добавлять любые коды JavaScript! Хакер может перенаправить пользователя на файл на другом сервере, содержащий злонамеренный код, который может изменить глобальные переменные или отправить форму на другой адрес для сохранения данных пользователя и т.д.
Как предотвратить использование $_SERVER["PHP_SELF"]?
Использование функции htmlspecialchars() может предотвратить использование $_SERVER["PHP_SELF"].
Код формы такой:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
Функция htmlspecialchars() преобразует особые символы в HTML-элементы. Теперь, если пользователь пытается использовать переменную PHP_SELF, это приведет к следующему выводу:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
Не может быть использован, нет危害а!
Проверка данных формы через PHP
В первую очередь мы должны передать все переменные через функцию PHP htmlspecialchars().
После использования функции htmlspecialchars() если пользователь пытается отправить следующий контент в текстовом поле:
<script>location.href('http://www.hacked.com')</script>
- Код не будет выполнен, так как он будет сохранен в виде escaped кода, как таковой:
<script>location.href('http://www.hacked.com')</script>
Теперь это код безопасно для отображения на странице или в электронной почте.
Когда пользователь отправляет эту форму, мы делаем две вещи:
- (Через функцию PHP trim()) Удаляем不必要的 символы из введенных данных пользователя (лишние пробелы, табуляторы, строки с переводом строки)
- (Через функцию PHP stripslashes()) Удаляем обратные слеш (\) из введенных данных пользователя
Далее мы создаем функцию проверки (это эффективнее, чем писать код一遍 за一遍).
Мы называем функцию test_input().
Теперь мы можем проверять каждый переменную $_POST с помощью функции test_input() и скрипт такой:
Пример
<?php // Определение переменных и установление их значений в пустые $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>
Обратите внимание, что в начале скрипта мы проверяем, был ли форма отправлена с помощью $_SERVER["REQUEST_METHOD"]. Если REQUEST_METHOD равен POST, форма была отправлена - и ее следует проверить. Если форма не была отправлена, пропустите проверку и покажите пустую форму.
Однако, в примере выше, все поля ввода являются необязательными. Даже если пользователь не вводит никакие данные, скрипт будет работать normalmente.
Следующим шагом является создание обязательных полей ввода и создание ошибок, которые могут потребоваться.
- Предыдущая страница Обработка форм PHP
- Следующая страница Обязательные поля PHP