Php проверка html форм

PHP Валидация (проверка) формы

Подумайте о БЕЗОПАСНОСТИ при обработке форм PHP! На этих страницах будет показано, как обрабатывать формы PHP с учетом требований безопасности. Надлежащая проверка данных формы важна для защиты вашей формы от хакеров и спамеров!

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

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

Сначала мы рассмотрим простой HTML-код формы:

Текстовые поля

Поля Имя, email и Веб-сайт являются элементами ввода текста, а поле комментария — текстовой областью. HTML-код выглядит так:

Радио-кнопки

Элемент form

Что такое переменная $_SERVER[«PHP_SELF»]?

$_SERVER[«PHP_SELF»] является суперглобальной переменной, которая возвращает имя исполняемого в данный момент скрипта.

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

Что такое функция htmlspecialchars()?

Функция htmlspecialchars() преобразует специальные символы в объекты HTML. Это означает, что он заменит HTML символы, такие как < и >с помощью < и >. Это предотвращает использование кода злоумышленниками путем внедрения кода HTML или Javascript (межсайтовый скриптинг) в формы.

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

Переменная $_SERVER[«PHP_SELF»] может быть использована хакерами!! Если на вашей странице используется PHP_SELF то пользователь может ввести косую черту (/), а затем выполнить некоторые команды межсайтового скриптинга (XSS — Cross Site Scripting).

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

Теперь, если пользователь вводит нормальный URL-адрес в адресной строке, как «http://www.example.com/test_form.html», приведенный выше код будет переведен в:

Этот код добавляет тег

Как избежать эксплойтов в $_SERVER["PHP_SELF"]?

$_SERVER["PHP_SELF"] эксплойтов можно избежать с помощью функции htmlspecialchars(). Код формы должен выглядеть следующим образом:

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

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

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

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

Назовем функцию test_input().

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

Пример

// определить переменные и установить пустые значения
$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, то форма была отправлена - и она должна быть проверена. Если она не была отправлена, пропустите проверку и отобразите пустую форму.

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

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

Источник

Проверка (валидация) форм PHP

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

Что такое валидация?

Валидация означает проверку данных, вводимых пользователем. В PHP доступны два типа проверки:

  • Валидация на стороне клиента — проверка выполняется на стороне клиента в веб-браузере.
  • Валидация на стороне сервера — после отправки данных на сервер их проверка осуществляется на серверной стороне.

Ниже приведена HTML-форма, которая содержит различные поля ввода: обязательные (required) и необязательные текстовые поля, переключатели (радио-кнопки) и кнопку отправки (submit). С этой формой мы будем с вами работать в этой главе. Попробуйте ввести данные:

Некоторые из правил проверки нашей формы:

Поле формы Правила валидации
Имя Обязатеьно для заполнения + Должно содержать только буквы и пробелы
E-mail Обязатеьно для заполнения + Требуются символ собачка (@) и точка (.)
Веб-сайт Необязательно для заполнения. Проверяется наличие валидного URL
Комментарий Необязательно для заполнения. Многострочное поле ввода (текстовое поле)
Образование Обязатеьно для заполнения + Должна быть выбрана хотя бы одна кнопка

Текстовые поля

Поля для ввода имени, адреса электронной почты и веб-сайта создается с помощью элемента (от англ. input — ввод) с атрибутом type="text", а поле для комментария применяется элемент (текстовая область). HTML-код выглядит так:

Радио-кнопки

В нашей форме выбор образования осуществляется с помощью элементов типа radio (переключатели), которые используют принцип логического «ИЛИ», позволяя выбрать только одно из нескольких значений: если вы выбираете одно положение, то все остальные становятся неактивными:

Элемент формы (form)

Главным для элемента является атрибут action, который указывает обработчик данных для формы. Обработчик данных — это файл, описывающий, что нужно делать с данными формы. Данные формы отправляются с помощью method = "post":

$_SERVER ["PHP_SELF"] — это суперглобальная переменная, которая возвращает имя файла текущего выполняемого скрипта-обработчика.

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

Функция htmlspecialchars() преобразует данные, введенные пользователем, которые могут содержать нежелательные HTML-тэги. Производятся следующие преобразования:

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

Примечание о безопасности форм PHP

Учтите, что переменная $_SERVER ["PHP_SELF"] может использоваться хакерами!

Если Вы используете на странице сайта PHP_SELF, то пользователь может ввести в адресной строке косую черту (/), а затем выполнить несколько команд межсайтового скриптинга (XSS).

Примечание: XSS (англ. Cross-Site Scripting — «межсайтовый скриптинг») — тип атаки на веб-системы, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода (который будет выполнен на компьютере пользователя при открытии им этой страницы) и взаимодействии этого кода с веб-сервером злоумышленника. XSS позволяет злоумышленникам внедрять клиентские скрипты в веб-страницы, просматриваемые другими пользователями..

Предположим, у нас есть следующая форма на странице с именем "send_form.php":

Теперь, если пользователь вводит обычный URL-адрес в адресной строке, например «http://site_name.com/send_form.php», приведенный выше код будет преобразован в:

Теперь пользователь вводит URL-адрес в адресной строке и после косой черты несколько команд межсайтового скриптинга:

http://site_name.com/send_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

После таких манипуляция приведенный выше код будет переведен на:

Этот код добавляет тег скрипта и команду предупреждения alert. Когда страница начнёт загружаться, код JavaScript будет выполнен и пользователь увидит окно предупреждения. Дальнейшая загрузка страницы прекратится до тех пор, пока пользователь не кликнет ОК. Это простой пример того, как можно использовать переменную PHP_SELF.

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

Как избежать эксплойтов $_SERVER["PHP_SELF"]?

Экспло́йт (англ. exploit, эксплуатировать) — это фрагмент вредоносного программного кода либо последовательность команд, которые используют уязвимости в программе и применяеются для проведения хакерской атаки.

Чтобы избежать экспойты нужно переменную $_SERVER["PHP_SELF"] предать в качестве аргумента в функцию htmlspecialchars() :

Функция htmlspecialchars() преобразует специальные символы (в нашем случае угловые скобки < и >) в объекты HTML. Теперь, если пользователь попытается использовать переменную PHP_SELF с целью внедрения стороннего кода, это приведет к следующему выводу:

Первым делом передадим все переменные формы в функцию PHP htmlspecialchars() . Эта функция возвращает строку, над которой проведены рассмотренные выше преобразования. Этих преобразований достаточно для защиты от эксплойта.

Теперь код можно безопасно отображать на странице или в электронном письме.

Сдедующим шагом применим ещё две функции:

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

И, наконец, создадим функцию, которая будет выполнять все рассмтренные проверки за нас, что намного удобнее, чем писать один и тот же код снова и снова. Назовем функцию test_input().

В следующем примере будем проверять каждую переменную $_POST с помощью функции test_input():

Пример

 //определим переменные и установим пустые значения 
$name = $email = $education = $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"]);
$education = test_input($_POST["education"]);
> function test_input($data) $data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
> ?>

В начале сценария мы проверяем, используя суперглобальную переменную $ _SERVER ["REQUEST_METHOD"], была ли отправлена ​​форма. Если для запроса страницы был использован метод POST, значит, форма была отправлена ​​— и ее нужно проверить. Если форма не была отправлена — пропускаем проверку и отображаем пустую форму.

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

В следующем уроке сделаем поля ввода обязательными, а также разберёмся как, при необходимости, создать сообщения об ошибках.

Источник

Читайте также:  Android using java project
Оцените статью