Php проверка нового сообщения

PHP5 Проверка форм

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

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

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

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

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

Правила проверки для приведенной выше формы следующие:

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

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

Поля ввода

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

Радио кнопки

Поля Пол, радио-кнопки. HTML код выглядит так:

PHP Элементы формы

HTML код выглядит следующим образом:

При отправке формы, данные формы отправляются с method=»post» .

Что такое $_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 позволяет злоумышленникам внедрить клиентскую часть скрипт на веб страницы, просмотренные другими пользователями.

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

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

Однако, считаю, что пользователь введет следующий URL в адресной строке:

В этом случае приведенный выше код будет переведен на:

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

Читайте также:  Linux python dist package

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

Как избежать злоупотребление $_SERVER[«PHP_SELF»] ?

Злоупотребление $_SERVER[«PHP_SELF»] , можно избежать с помощью функции htmlspecialchars() .

Код формы должен выглядеть следующим образом:

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

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

PHP Проверка данных формы

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

Когда используется функция htmlspecialchars(); затем, если пользователь пытается отправить следующее текстовое поле:

— не будет выполняться, потому что она будет сохранена как сбежавший HTML код, как это:

Код теперь безопасен для отображения на странице и внутри e-mail.

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

  1. Прокладка ненужных символов (лишний пробел, табуляции, символы новой строки) ввод данных пользователя с отделкой функции PHP()
  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 доступны два типа проверки:

  • Валидация на стороне клиента — проверка выполняется на стороне клиента в веб-браузере.
  • Валидация на стороне сервера — после отправки данных на сервер их проверка осуществляется на серверной стороне.
Читайте также:  Получение прогноза погоды python

Ниже приведена 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

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

Читайте также:  Python variable in regexp

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

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

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

Источник

Оцените статью