Это и последующие главы показывают, как использовать PHP для проверки данных формы.
PHP Form Validation
Подумайте SECURITY при обработке PHP форм!
На этих страницах будут показаны, как обрабатывать PHP форму с учетом требований безопасности. Правильная проверка данных формы важно защитить свою форму от хакеров и спамеров!
HTML форма, которую мы будем работать в этих главах, содержит различные поля ввода: обязательные и дополнительные текстовые поля, радио-кнопки, и кнопка представить:
Эти правила проверки для формы выше, являются следующими:
поле | правила проверки |
---|---|
имя | Необходимые. + Должен содержать только буквы и пробелы |
Эл. почта | Необходимые. + Должен содержать действительный адрес электронной почты (with @ and .) |
Веб-сайт | Необязательный. Если присутствует, то он должен содержать действительный URL |
Комментарий | Необязательный. Поле ввода Многоканальный (textarea) |
Пол | Необходимые. Необходимо выбрать один |
Во-первых, мы будем смотреть на простой HTML код для формы:
Текстовые поля
В имя, адрес электронной почты и поля веб-сайта являются элементы ввода текста, а поле комментария является текстовое поле. HTML код выглядит следующим образом:
Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website:
<input type="text" name="website">
Comment:
<textarea name="comment" rows="5" cols="40"></textarea>
Радио-кнопки
Гендерные поля являются селективными кнопками и 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"]);?>">
Когда форма отправлена, данные формы отправляются с помощью метода = «пост».
Что такое переменная $ _SERVER [ "PHP_SELF"]?
$ _SERVER [ «PHP_SELF»] супер глобальная переменная, которая возвращает имя файла в данный момент скрипта.
Таким образом, $ _SERVER [ «PHP_SELF»] направляет представленные данные формы на саму страницу, вместо того, чтобы прыгать на другую страницу. Таким образом, пользователь получит сообщение об ошибке на той же странице, что и формы.
Что такое htmlspecialchars() функции?
htmlspecialchars() функция преобразует специальные символы в HTML сущности. Это означает, что он заменит HTML символы, такие как <и> с & л; и & GT ;. Это предотвращает злоумышленников от использования кода, вводя HTML или Javascript код (Cross-site Scripting attacks) в формах.
Большое Обратите внимание на PHP Форма безопасности
$ _SERVER [ «PHP_SELF»] переменная может быть использована хакерами!
Если PHP_SELF используется в вашей странице , то пользователь может ввести косую черту (/) , а затем некоторый Cross Site Scripting (XSS) команду для выполнения.
Межсайтовый скриптинг (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 будет выполнена (the user will see an alert box) с (the user will see an alert box) . Это всего лишь простой и безобидный пример того, как переменная PHP_SELF может быть использована.
Имейте в виду , что любой код JavaScript может быть добавлен внутри <script> тег! Хакер может перенаправить пользователя в файл на другом сервере, и этот файл может содержать вредоносный программный код, который может изменять глобальные переменные или представить форму на другой адрес, чтобы сохранить пользовательские данные, например.
Как избежать $ _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() функция.
Когда мы используем htmlspecialchars() функции; Затем, если пользователь пытается отправить следующее в текстовое поле:
<Скрипт> место. href('http://www.hacked.com') </ скрипт>
- это не будет выполнено, так как он будет сохранен как HTML-код убежали, как это:
& Lt; & сценарий GT; местоположение. href('http://www.hacked.com') & л; / & сценарий GT;
Код теперь безопасно отображаться на странице или в сообщении электронной почты.
Мы также будем делать еще две вещи, когда пользователь отправляет форму:
- Strip ненужные символы (extra space, tab, newline) из пользовательского ввода данных (with the PHP trim() функции)
- Удалить обратной косой черты (\) из пользовательского ввода данных (with the PHP stripslashes() функция)
Следующим шагом является создание функции , которая будет делать все проверки для нас (which is much more convenient than writing the same code over and over again) , (which is much more convenient than writing the same code over and over again) один и (which is much more convenient than writing the same code over and over again) .
Мы будем называть функцию test_input() .
Теперь мы можем проверить каждую переменную $ _POST с test_input() функции, и сценарий выглядит следующим образом :
пример
<?php
// define variables and set to empty values
$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, то форма была отправлена - и это должно быть подтверждено. Если он не был представлен, пропустить проверку и отобразить пустую форму.
Тем не менее, в приведенном выше примере, все входные поля являются необязательными. Скрипт работает отлично, даже если пользователь не вводит никаких данных.
Следующий шаг, чтобы сделать поле ввода необходимого и создавать сообщения об ошибках, если это необходимо.