English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

php фильтрация ввода операции htmlentities и использование htmlspecialchars

Этот пример рассказывает о фильтрации ввода в PHP с использованием функции htmlentities и htmlspecialchars. Поделюсь с вами, как это делается:

Фильтрация ввода (будь то данные из любого из перечисленных источников) означает экранирование или удаление небезопасных символов. Убедитесь, что данные фильтруются перед тем, как они достигнут слоя хранения приложения. Это первое линии обороны. Если форма комментариев сайта принимает HTML, по умолчанию посетители могут без помех добавлять злонамеренные теги <script>, например:

<p>
  Мой тест
</p>
<script>alert(123)</script>

В примере выше. Если не фильтровать этот комментарий, злонамеренный код будет сохранен в базу данных, а затем отобразится в маркере сайта.

HTML

Мы можем использовать функции htmlentities или htmlspecialchars для фильтрации HTML, преобразуя особые символы в соответствующие html-символы.

Функция htmlentities преобразует все содержащие соответствующие "html-символы" особые символы, такие как символы валюты, евро, фунты стерлингов и т.д., символы авторского права и т.д., а function htmlspecialchars только экранирует некоторые особые символы, & " ' < >

Эти две функции кажутся глупыми, по умолчанию они не экранируют кавычки

$str='<a href="test.html" rel="external nofollow" >\'тестовая страница\'</a><script>alert(213)</script>'; 
// не экранируются кавычки
echo $str;
echo "<hr/>".PHP_EOL;
echo htmlentities($str);
echo "<hr/>".PHP_EOL;
echo htmlspecialchars($str);

Необходимо установить второй параметр ENT_QUOTES, подробности можно найти в руководстве по PHP

echo htmlentities($str,ENT_QUOTES,'UTF-8'); // перевести кавычки также в экранированные
echo "<hr/>".PHP_EOL;
echo htmlspecialchars($str,ENT_QUOTES,'UTF-8');// также экранируется одинарные кавычки

Эти примеры не позволяют отличить htmlentities от htmlspecialchars. Давайте используем некоторые особые символы, такие как евро, чтобы изменить это. htmlentities будет их экранировать, а htmlspecialchars — нет

echo htmlentities(' <>"').PHP_EOL;
echo "<hr/>".PHP_EOL;
echo htmlspecialchars(' <>"').PHP_EOL; // без экранирования

Заключение:При обычной отправке формы можно использовать функцию strip_tags для удаления HTML-тегов, если необходимо сохранить HTML-теги в редактореrich text, можно использовать функцию htmlspecialchars для фильтрации переданных данных.

Для тех, кто интересуется дополнительной информацией о PHP, рекомендуется посмотреть темы на нашем сайте: «Безопасность PHP-приложений», «Суммарные советы по безопасности фильтрации PHP», «Суммарные советы по использованию операторов и операндов PHP», «Суммарные советы по сетевому программированию PHP», «Введение в базовую грамматику PHP», «Введение в объектно-ориентированное программирование PHP», «Суммарные советы по использованию строк (string) в PHP», «Введение в операции с базами данных MySQL в PHP» и «Суммарные советы по общим операциям с базами данных в PHP»

Надеюсь, что информация, предоставленная в этой статье, поможет вам в разработке PHP-приложений.

Заявление: содержание этой статьи взято из интернета, авторские права принадлежат авторам, материалы предоставлены пользователями интернета, сайт не обладает правами собственности, материалы не редактировались вручную, и сайт не несет ответственности за связанные с этим юридические вопросы. Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @) для сообщения о нарушении,并提供相关证据. В случае подтверждения нарушения, сайт немедленно удаляет涉嫌侵权的内容.

Учебник Elasticsearch