
Доброго времени суток дорогие друзья и сразу перейдем к делу. Для предотвращения возникновения ошибок и взлома, мы просто обязаны проверять и обрабатывать данные которые отправляет нам пользователь. Иначе жди беды. Одним из способов обработки данных является использование специальных функций которые позволяют убирать теги, экранировать спец. символы, хешировать данные и т.д.
И рассмотрим следующий пример:
<!DOCTYPE>
<html>
<head>
<meta charset="utf-8">
<title >
Специальные функции
</title>
</head>
<body>
<?php
$script = "<script> alert('Привет'); </script>";
echo $script;
?>
</body>
</html>
здесь при выполнении js скрипта сценарий которого записан в переменную выводится модальное окно alert(). И теперь только представьте себе, что если пользователь запишет в базу какой либо js -сценарий при регистрации, комментарии и т.п. , и мы в каком нибудь месте для указания его выведем на страницу?! Я думаю что последствия могут быть крайне неприятными. Поэтому если мы хотим вывести на страницу данные пришедшие от пользователя, то их лучше обработать функцией htmlspecialchars ().
$script = "<script> alert('Привет'); </script>";
echo htmlspecialchars($script);
данная функция экранирует специальные символы в результате чего наш js-сценарий был отображен в виде обычной строки. Обратная функция htmlspecialchars_decode() убирает экранирование специальных символов.
Следует учитывать что функция htmlspecialchars() может принимать еще два необязательных параметра:
Одну из трех констант (ENT_COMPAT - Преобразует двойные кавычки стоит по умолчанию , ENT_QUOTES - Преобразует и двойные, и одиночные кавычки, ENT_NOQUOTES - преобразует двойные кавычки) и кодировку используемую при преобразовании.
$script = "<script> alert('Привет'); </script>";
echo htmlspecialchars($script,ENT_QUOTES,'UTF-8');
как видите здесь ничего сложного нет.
Едем дальше. У функции htmlspecialchars() есть аналогичная функция htmlentities (). Она принимает те же параметры и по виду также работает:
$script = "<script> alert('Привет'); </script>";
echo htmlentities($script,ENT_QUOTES,'UTF-8');
но имеет свои особенности в том что обрабатывает все спец. символы html-представления в отличии от htmlspecialhars() в которой производится выборочная трансляция.
С помощью функции strip_tags() мы можем убирать из наших строк html -теги:
$script = "<script> alert('Привет'); </script>";
echo strip_tags($script);
как видите тег script был после обработки фукцией strip_tags() был удален. Данной функции мы можем передавать третий необязательный параметр а, именно строку с перечислением тегов которые хотим чтобы функция не удаляла пример:
$script = "<script> alert('<b>Привет</b>'); </script>";
echo strip_tags($script,'<b>');
здесь как видите мы указали что тег b мы не будем удалять. Если тег не один:
$script = "<script> alert('<b>Привет<span style=\"color:red;\"> Мир!</span></b>'); </script>";
echo strip_tags($script,'<b><span>');
Далее я хотел бы окцентировать ваше внимание на функции trim() которая позволяет убирать все пробели из начала и конца строки.
$text = " Привет ";
echo "'".trim($text)."'";
да может быть пример не самый лучший, данную функцию лучше использовать при обработке данных пришедших от пользователя из форм. При ситуации если пользователь случайно ввел пробел в начале или в конце строки данная функция может быть очень актуальной.
Теперь поговорим о хешировании паролей с помощью функции md5. Все мы знаем как важно подбирать сложные и длинные пароли для уменьшения вероятности взлома, но порой игнорируем казалось бы эти банальные рекомендации. И поэтому чтобы затруднить злоумышленнику жизнь если он все же получил доступы к ним были разработаны специальные функции и одной из них является md5(), пример:
$password = "1234";
echo $password;
здесь мы видим банальный пароль, и посмотрим что будет после обработки md5():
$password = "1234";
echo md5($password);
после обработки мы получили хеш 81dc9bdb52d04dc20036dbd8313ed055 и именно в таком виде будет хранится пароль 1234 в базе данных. По сути в базе будет храниться не сам пароль, а его хеш.
Что вы должны знать об md5()? Во первых обратной функции здесь нет, то есть мы не можем преобразовать наш хеш 81dc9bdb52d04dc20036dbd8313ed055 обратно в 1234. Во вторых в независимости от длины вашего пароля хеш будет состоять из 32 символов цифр и букв. В третьих хеш для каждой последовательности символов не меняется, что не помешает подобрать его.
Данную функцию в основном используют для хранения паролей в базе данных.
На этом дорогие друзья у меня на сегодня все. Надеюсь вы смогли узнать сегодня что то новое.
А я с вами прощаюсь и желаю успехов!