САМОСТОЯТЕЛЬНОЕ ОБУЧЕНИЕ ДЛЯ ВЕБ РАЗРАБОТЧИКОВ
×

PHP5 Учебник

PHP Главная PHP Введение PHP Установка PHP Синтаксис PHP Переменные PHP Echo/Print PHP Типы данных PHP Строки PHP Константы PHP Операторы PHP Заявления if...else PHP Заявления switch PHP Цикл while PHP Циклы for, foreach PHP Функции PHP Массивы PHP Сортировка массивов PHP Суперглобальные массивы

PHP Формы

PHP Формы PHP Проверка форм PHP Поля форм PHP Проверка почты PHP Полная форма

PHP Продвинутый

PHP Мульти массивы PHP Дата и время PHP Подключение PHP Обработка файлов PHP Открыть файл PHP Создать файл PHP Загрузить файл PHP Файлы cookie PHP Проведение сессий PHP Фильтры PHP Расширенные фильтры PHP Обработка ошибок PHP Обработка исключений

MySQL

MySQL База данных MySQL Установить MySQL Создать БД MySQL Создать таблицу MySQL Вставить данные MySQL Получить ID MySQL Вставить записи MySQL Подготовленные MySQL Выбрать данные MySQL Удалить данные MySQL Обновить данные MySQL Лимит данных

PHP - XML

PHP XML Парсер PHP XML Анализатор PHP XML Вывод PHP XML Экспат PHP XML DOM

PHP - AJAX

AJAX Введение AJAX PHP AJAX База данных AJAX XML AJAX Живой Поиск AJAX RSS Считывание AJAX Опрос

PHP Примеры

PHP Примеры

PHP Справочник

PHP Краткий обзор PHP Массив PHP Календарь PHP Дата/Время PHP Директория PHP Ошибка PHP Файловая система PHP Фильтр PHP FTP PHP HTTP PHP JSON PHP Libxml PHP Почта PHP Математика PHP Различные PHP MySQLi PHP Локальная сеть PHP Регулярное выражение PHP Простой XML PHP Поток PHP Строки PHP Переменная обработка PHP XML Парсер PHP Zip файлы PHP Часовой пояс

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



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


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

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

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

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

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

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

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


Поля ввода

Поля - Имя, E-mail, Вебсайт, являются элементами ввода текста, а Комментарий полем-текстового ввода. 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="Женский">Женский
<input type="radio" name="gender" value="Мужской">Мужской

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

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

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

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

Что такое $_SERVER["PHP_SELF"]?

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

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

Что такое htmlspecialchars()?

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


PHP Предупреждение о безопасности формы

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

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

Cross-site scripting (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 (пользователь увидит окно предупреждения). Это просто и безобидный пример того, как переменная PHP_SELF может быть использован.

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


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

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

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

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

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

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

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


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

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

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

<script>location.href('http://www.hacked.com')</script>

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

&lt;script&gt;location.href('http://www.hacked.com')&lt;/script&gt;

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

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

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

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

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

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

Пример

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

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

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