Безопасность данных
Большое значение в PHP имеет организация безопасности данных. Рассмотрим несколько простых механизмов, которые могут повысить безопасность нашего веб-сайта. Но вначале возьмем форму из прошлой темы:
<!DOCTYPE html>
<html>
<head>
<title>hmarketing.ru</title>
<meta charset="utf-8" />
</head>
<body>
<?
$name = "не определено";
$age = "не определен";
if(isset($_POST["name"])){
$name = $_POST["name"];
}
if(isset($_POST["age"])){
$age = $_POST["age"];
}
echo "Имя: $name <br> Возраст: $age";
?>
<h3>Форма ввода данных</h3>
<form method="POST">
<p>Имя: <input type="text" name="name" /></p>
<p>Возраст: <input type="number" name="age" /></p>
<input type="submit" value="Отправить">
</form>
</body>
</html>
И попробуем ввести в нее некоторые данные. Например, введем в поле для имени <script>alert(hi);</script>
:
Получим следующий вывод:
После отправки данных в html разметку будет внедрен код javascript, который выводит окно с сообщением.
Это относительно простой и безвредный скрипт. Однако внедряемый код может быть более вредоносным. И чтобы избежать подобных проблем с безопасностью, рекомендуется применять функцию htmlentities()
. В качестве параметра она принимает значение, которое надо экранировать:
<?
$name = "не определено";
$age = "не определен";
if(isset($_POST["name"])){
$name = htmlentities($_POST["name"]);
}
if(isset($_POST["age"])){
$age = htmlentities($_POST["age"]);
}
echo "Имя: $name <br> Возраст: $age";
И даже после ввода кода html или javascript все теги будут экранированы, и мы получим следующий вывод:
Еще одна специальная функция - htmlspecialchars()
похожа по действию на htmlentities:
<?
$name = "не определено";
$age = "не определен";
if(isset($_POST["name"])){
$name = htmlspecialchars($_POST["name"]);
}
if(isset($_POST["age"])){
$age = htmlspecialchars($_POST["age"]);
}
echo "Имя: $name <br> Возраст: $age";
Еще одна функция - функция strip_tags()
позволяет полностью исключить теги html:
<?
$name = "не определено";
$age = "не определен";
if(isset($_POST["name"])){
strip_tags($_POST["name"]);
}
if(isset($_POST["age"])){
strip_tags($_POST["age"]);
}
echo "Имя: $name <br> Возраст: $age";
Результатом ее работы при том же вводе будет следующий вывод: