Большое значение в PHP имеет организация безопасности данных. Рассмотрим несколько простых механизмов, которые могут повысить безопасность нашего веб-сайта.
Но вначале возьмем форму из прошлой темы:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php $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";
Результатом ее работы при том же вводе будет следующий вывод: