ЛУЧШИЙ САЙТ ДЛЯ РАЗРАБОТЧИКОВ
×

PHP учебник

PHP HOME PHP Intro PHP Install PHP Syntax PHP Variables PHP Echo / Print PHP Data Types PHP Strings PHP Constants PHP Operators PHP If...Else...Elseif PHP Switch PHP While Loops PHP For Loops PHP Functions PHP Arrays PHP Sorting Arrays PHP Superglobals

PHP Forms

PHP Form Handling PHP Form Validation PHP Form Required PHP Form URL/E-mail PHP Form Complete

PHP Advanced

PHP Arrays Multi PHP Date and Time PHP Include PHP File Handling PHP File Open/Read PHP File Create/Write PHP File Upload PHP Cookies PHP Sessions PHP Filters PHP Filters Advanced PHP Error Handling PHP Exception

MySQL Database

MySQL Database MySQL Connect MySQL Create DB MySQL Create Table MySQL Insert Data MySQL Get Last ID MySQL Insert Multiple MySQL Prepared MySQL Select Data MySQL Delete Data MySQL Update Data MySQL Limit Data

PHP - XML

PHP XML Parsers PHP SimpleXML Parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Intro AJAX PHP AJAX Database AJAX XML AJAX Live Search AJAX RSS Reader AJAX Poll

PHP Examples


PHP Reference

PHP Overview PHP Array PHP Calendar PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones


PHP 5 Form Validation


В этой и следующих главах показано, как использовать PHP для проверки данных формы.


Проверка формы PHP

Подумайте безопасности при обработке PHP форм!

На этих страницах будет показано, как обрабатывать PHP-формы с учетом безопасности. Правильная проверка данных формы важна для защиты вашей формы от хакеров и спамеров!

HTML-форма, в которой мы будем работать в этих главах, содержит различные поля ввода: обязательные и необязательные текстовые поля, переключатели и кнопку Submit:

Ниже приведены правила проверки для данной формы.

Поле Правила проверки
Name Обязательно. + Должен содержать только буквы и пробелы
E-mail Обязательно. + Должен содержать действительный адрес электронной почты (с @ и.)
Website Дополнительные. Если он присутствует, он должен содержать допустимый URL-адрес
Comment Дополнительные. Многострочный ввод (текстовое поле)
Gender Обязательно. Необходимо выбрать один

Сначала мы рассмотрим простой 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
<input type="radio" name="gender" value="other">Other

Элемент Form

HTML-код формы выглядит следующим:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

При отправке формы данные формы передаются методом = "Post".

Что такое переменная $ _сервер ["фп_селф"]?

$ _сервер ["фп_селф"] является супер глобальной переменной, которая возвращает имя файла выполняющегося в данный момент скрипта.

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

Что такое функция хтмлспеЦиалчарс ()?

Функция хтмлспеЦиалчарс () преобразует специальные символы в сущности HTML. Это означает, что он заменит символы HTML, такие как < и > с & lt; и & gt;. Это предотвращает использование злоумышленниками кода путем введения кода HTML или JavaScript (межсайтовые скриптовые атаки) в формах.


Большая заметка о безопасности формы PHP

Переменная $ _сервер ["фп_селф"] может быть использована хакерами!

Если фп_селф используется на вашей странице, то пользователь может ввести косую черту (/), а затем Некоторые команды сценариев кросс-сайта (XSS) для выполнения.

Межсайтовые сценарии (XSS) — это тип уязвимости компьютерной безопасности, который обычно встречается в веб-приложениях. XSS позволяет злоумышленникам внедрить клиентский сценарий на веб-страницы, просматриваемые другими пользователями.

Предположим, что у нас есть следующая форма на странице с именем "тест_форм. 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>

Этот код добавляет тег сценария и команду Alert. И когда страница загружается, код JavaScript будет выполняться (пользователь увидит окно оповещения). Это всего лишь простой и безобидный пример того, как можно использовать переменную фп_селф.

Имейте в виду, что любой код JavaScript может быть добавлен внутри тега < script >! Хакер может перенаправить пользователя в файл на другом сервере, и этот файл может содержать вредоносный код, который может изменить глобальные переменные или отправить форму на другой адрес для сохранения пользовательских данных, например.


Как избежать $ _сервер ["фп_селф"] подвиги?

$ _сервер ["фп_селф"] эксплойтов можно избежать с помощью функции хтмлспеЦиалчарс ().

Код формы должен выглядеть так:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Функция хтмлспеЦиалчарс () преобразует специальные символы в сущности HTML. Теперь, если пользователь пытается использовать переменную фп_селф, это приведет к следующему результату:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

Попытка подвига терпит неудачу, и никакой вред не сделан!


Проверка данных формы с помощью PHP

Первое, что мы будем делать, это передать все переменные через PHP в хтмлспеЦиалчарс () функции.

При использовании функции хтмлспеЦиалчарс (); Затем, если пользователь пытается отправить следующее в текстовом поле:

< сценарий > расположение. href (' http://ВВВ.хаккед.ком ') </script >

-Это не было бы выполнено, потому что оно было бы сохранено как код экранированный HTML, как это:

& lt; скрипт & gt; Location. href (' http://ВВВ.хаккед.ком ') & lt;/скрипт&АМП;ГТ;

Теперь код безопасен для отображения на странице или внутри сообщения электронной почты.

Мы также будем делать еще две вещи, когда пользователь отправляет форму:

  1. Прокладка ненужных символов (лишнего пространства, табуляции, новой строки) из входных данных пользователя (с помощью функции PHP Trim ())
  2. Удаление обратной косой черты (\) из входных данных пользователя (с помощью функции PHP stripslashes ())

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

Будем называть функцию тест_инпут ().

Теперь мы можем проверить каждую переменную $ _пост с помощью функции тест_инпут (), и сценарий выглядит следующим:

Пример

<?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;
}
?>

Обратите внимание, что в начале скрипта мы проверяем, была ли форма отправлена с помощью $ _сервер ["рекуест_месод"]. Если рекуест_месод является POST, то форма была отправлена-и она должна быть проверена. Если он не был отправлен, пропустите проверку и отобразите пустую форму.

Однако в приведенном выше примере все поля ввода являются необязательными. Сценарий работает нормально, даже если пользователь не вводить какие-либо данные.

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