PHP Form Validation
В этой главе описывается, как использовать наши данные формы PHP, представленные проверки клиента.
PHP Form Validation
При работе с PHP форме мы должны рассмотреть вопрос о безопасности. В этой главе мы покажем вам безопасность данных PHP Form Processing, для того, чтобы предотвратить хакеров и спама, мы должны обеспечить проверку данных формы. |
HTML форма, описанная в этом разделе содержит следующие поля ввода: должны использоваться с дополнительными текстовыми полями, радио-кнопки, и кнопки отправки:
Выше формы правила проверки заключаются в следующем:
поле | правила проверки |
---|---|
имя | Must. + Содержат только буквы и пробелы |
Электронная почта | Must. + Должен быть действительный адрес электронной почты (включая @ 'и'. ') |
сайт | Must. Если он присутствует, он должен содержать действительный URL |
замечание | Must. Многоканальный поле ввода (текстовое поле) |
пол | Must. Вы должны выбрать |
Во-первых, давайте посмотрим на простой HTML-кода формы:
Текстовое поле
"Имя", "Электронная почта", а поле "URL" является элементом ввода текста, в поле "Примечания" представляет собой текстовое поле. HTML-код следующим образом:
“名字”: <input type="text" name="name"> E-mail: <input type="text" name="email"> 网址: <input type="text" name="website"> 备注: <textarea name="comment" rows="5" cols="40"></textarea>
кнопка радио
Поле "Пол" является радио-кнопка, HTML код выглядит следующим образом:
性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男
элементы формы
HTML код формы выглядит следующим образом:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Используйте этотметод = "пост" метод формы для отправки данных.
Что такое $ _SERVER [ "PHP_SELF"] переменные? $ _SERVER [ "PHP_SELF"] супер глобальная переменная, возвращает имя файла сценария исполняемую в данный момент, связанный с корнем документа. |
Так, $ _SERVER [ "PHP_SELF"] будет посылать данные формы на текущую страницу, вместо того, чтобы прыгать на другую страницу.
Что такое htmlspecialchars () метод? htmlspecialchars () для некоторых предопределенных символов в HTML-сущностей. Предварительно определенные символы:
|
PHP форма требуется, чтобы вызвать внимание, где?
$ _SERVER [ "PHP_SELF"] переменные могут быть использованы хакерами!
Когда хакеры, использующие Cross-Site Scripting HTTP ссылку, чтобы атаковать, $ _ SERVER переменная [ "PHP_SELF"] будет имплантирован в сценарии сервера. Причина заключается в том, что межсайтовые файл сценария исполняемым присоединен к пути позади, $ _SERVER [ "PHP_SELF"] строка будет содержать ссылки HTTP, лежащие в основе кода JavaScript.
XSS также известный как CSS (Cross-Site Script), межсайтовый атак сценариев. Злоумышленник вставить вредоносный веб - страницы в HTML - коде, когда пользователь просматривают страницу, встроенный Web внутри HTML код будет выполняться для достижения конкретной цели злоумышленника. |
Укажите следующий вид файл с именем "test_form.php":
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Теперь мы используем URL, чтобы отправить по указанному адресу "test_form.php", как показано в приведенном выше коде изменяется следующим образом:
<form method="post" action="test_form.php">
Это хорошо.
Тем не менее, принимая во внимание пользователя будет ввести следующий адрес в адресной строке браузера:
http://www.w3big.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
Выше URL, будет интерпретироваться как следующий код и выполнить его:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
Добавьте код тега сценария и добавьте команду предупреждения. При загрузке страницы будет выполнять код Javascript (пользователь увидит всплывающее окно). Это лишь простой пример, чтобы проиллюстрировать переменной PHP_SELF будет использоваться хакерами.
Пожалуйста , обратите внимание , что любой код JavaScript может быть добавлен в тег <скрипт>! Хакеры могут использовать эту страницу для перенаправления на сервер на другую страницу, код файла подкачки, чтобы защитить вредоносный код, код может быть изменен, чтобы получить пользователя глобальные переменные или данные формы.
Как избежать $ _SERVER [ "PHP_SELF"] эксплуатируют?
$ _SERVER [ "PHP_SELF"] с помощью htmlspecialchars () функция, чтобы избежать эксплуатации.
формируют код следующим образом:
<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
Прежде всего, мы представили данные функции пользователя () обрабатывается через htmlspecialchars PHP.
Когда мы используем htmlspecialchars () функции, то пользователь пытается отправить следующие текстовые поля:
<script>location.href('http://www.w3big.com')</script>
Код не будет выполнен, так как он будет сохранен как код HTML побег следующим образом:
<script>location.href('http://www.w3big.com')</script>
Приведенный выше код является безопасным и может отображаться или вставить сообщение на странице.
Когда пользователь отправляет форму, мы будем делать следующие две вещи:
- Используйте PHP функцию обрезки () для удаления введенных пользователем данных ненужные символы (такие как: пробел, табуляция, символ новой строки).
- Использование PHP stripslashes () функцию, чтобы удалить обратный слеш пользовательский ввод данных (\)
Пусть эти фильтрующие функции, записанные в зависимости от нашего собственного определения, это может значительно улучшить повторное использование кода.
Функция с именем test_input ().
Теперь мы можем test_input функцию (), чтобы обнаружить все переменные в $ _POST, код сценария выглядит следующим образом:
примеров
// 定义变量并默认设置为空值
$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, форма будет представлена - данные будут проверены. Если форма не будет представлен будет пропускать проверку и отображает пустой.
Используйте входные элементы в приведенных выше примерах являются необязательными, даже если пользователь не введет какие-либо данные могут отображаться неправильно.
В следующем разделе мы опишем, как для проверки данных, вводимых пользователем.