(краткое содержание)
Основы
При создании web-приложений необходимо учитывать особенности
обеспечения безопасности как самого приложения, так и пользователей,
использующих его. Так, одной из проблем безопасности является момент ввода и
получения пользовательских данных, которые могут содержать в себе, например,
вредоносный код в виде вводимого в поля формы текста (инъекции).
Для обеспечения безопасности используются два подхода для обработки
данных:
- очистка данных, которая проверяет поступающую информацию и очищает ее
от опасных или подозрительных кусков информации;
- проверка данных, осуществляющая проверку поступающих данных и
обеспечивает подтверждение передачи или отказ в ней.
Эти подходы можно рассмотреть на примерах:
1) Предположим, что пользователю необходимо отправить запрос в виде
числового значения методом GET. При этом, пользователь в поле ввода
информации мог по ошибке или со злым умыслом добавить дополнительные
символы, например, <>. При поступлении со стороны пользователя, запрос
обрабатывается специальными фильтрами, которые исключают из запроса
символы, не соответствующие требованию числовых типов и в сценарий поступает
уже числовой тип. Такой способ называется фильтрацией.
2) В поле ввода электронной почты формат записи должен соответствовать
типу example@email.com, т. е. должен содержать буквы английского алфавита,
либо арабские цифры и ряд допустимых символов, например «.», «-» и т. п. до знака
«@», затем сам знак «@», после, опять же, буквы английского алфавита,
допустимые символы и арабские цифры, затем знак «.» и имя домена, содержащее
арабские цифры или буквы английского алфавита. При этом, пользователь может
ввести в имени получателя запрещенные в адресах электронной почты символы. В
таких случаях функции поступающей информации проверят адрес на соответствие
требованиям и либо отправят его в сценарий, либо откажут, что, обычно, приводит
к уведомлению пользователя о неверно введенном пароле.
1
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
2
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
3
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
Функция filter_var()
Синтаксис функции:
mixed filter_var(mixed $variable [, int $filter = FILTER_DEFAULT, mixed $options])
Функция принимает следующие параметры:
- $variable – аргумент-переменная, которая будет подвергнута фильтрации;
- $filter – параметр-фильтр, принимающий любое из возможных значений,
указанных ранее в этом уроке (по умолчанию принимает значение FILTER_DEFAULT,
которое не предпринимает никаких действий по фильтрации данных);
- $options – аргумент, который может принимать как ассоциативный массив
параметров, так и логическое выражение «ИЛИ», которые содержат как флаги
фильтрации, так и параметры-опции для фильтров проверки.
Функция filter_var_array()
Синтаксис функции:
mixed filter_var_array(array $data [, mixed $definition, bool $add_empty = true])
Функция принимает следующие параметры:
- $data – ассоциативный массив аргументов-параметров, где ключами массива
выступают имена переменных;
- $definition – ассоциативный массив, содержащий параметры фильтрации, в
котором ключом выступает имя соответствующей аргумента-переменной, а
значением либо тип фильтра, либо ассоциативный массив, в котором допустимы
такие ключи, как ‘filter’, ‘flags’, ‘options’;
- $add_empty – параметр, который в значении true добавляет отсутствующие
ключи со значением null.
Функция filter_input()
Функция filter_input(), в отличие от filter_var(), принимает переменную из
глобальных массивов поступающей информации $_GET, $_POST, $_COOKIE, $_SERVER,
$_ENV.
Синтаксис функции:
mixed filter_input(int $type, string $variable_name [, int $filter = FILTER_DEFAULT, mixed
$options])
Функция принимает следующие параметры:
- $type – тип поступающей информации, принимает одну из констант:
INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV;
- $variable_name – имя переменной, входящей в глобальный массив;
- $filter – тип используемого фильтра;
- $options – ассоциативный массив или логическое ИЛИ флагов.
4
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
5
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
6
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
);
$sanitize_array = array(
'email' => 'mfsd*#@mail<script>.com',
'URL' => 'example<>().abrakadabra.com',
'float' => '1233fr.23fd',
'int' => 'fdsfsd123',
'spec_chars' => '<script>$fdsfsdlk=$fkjld;<script>',
'string' => '<p>Abrakadabra</p>'
);
//Функции фильтрации
//Функция filter_var()
$validate = filter_var($validate, FILTER_VALIDATE_EMAIL);
$sanitize = filter_var($sanitize, FILTER_SANITIZE_EMAIL);
//Функция filter_var_array()
$validate_array = filter_var_array($validate_array, $validate_parameters);
7
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
//Вывод данных
//Аргументы-переменные
echo "<p><b>Результат работы функции проверки (валидации) аргумента-
переменной:</b> $validate</p>";
echo "<hr>";
echo "<p><b>Результат работы функции очистки аргумента-переменной:</b>
$sanitize</p>";
echo "<hr>";
//Ассоциативные массивы данных
echo "<b>Результат работы функции проверки ассоциативного массива аргументов-
переменных:</b>";
foreach($validate_array as $k => $v)
echo "<p>[{$k}] => $v</p>";
echo "<hr>";
echo "<b>Результат работы функции очистки ассоциативного массива аргументов-
переменных:</b>";
foreach($sanitize_array as $k => $v)
echo "<p>[{$k}] => $v</p>";
echo "<hr>";
if($_POST['submit']){
$input_var = filter_input(INPUT_POST, 'mail', FILTER_SANITIZE_EMAIL);
$def = array(
'name' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
'mail' => FILTER_SANITIZE_EMAIL,
'url' => FILTER_SANITIZE_URL
);
$input_array = filter_input_array(INPUT_POST, $def);
echo "<p><b>Результат фильтрации аргумента-переменной из массива
\$_POST:</b> $input_var</p>";
echo "<hr>";
echo "<b>Результат фильтрации данных, поступивших из массива \$_POST:</b>";
foreach($input_array as $k => $v)
echo "<p><i>[{$k}]</i>: {$v}</p>";
echo "<hr>";
} else {
echo "<form action=\"Listing_49.2.php\" method=\"post\">
8
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
<div>
<input type=\"text\" name=\"name\" placeholder=\"Имя пользователя\">
</div>
<div>
<input type=\"text\" name=\"mail\" placeholder=\"Email пользователя\">
</div>
<div>
<input type=\"text\" name=\"url\" placeholder=\"Адрес сайта\">
</div>
<div>
<input type=\"submit\" name=\"submit\" value=\"Отправить\">
</div>
</form>";
}
9
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
10