Суббота, 21.12.2024
Меню сайта
Вход на сайт
Поиск
Статистика
Яндекс.Метрика
Реклама
HTML Perl PHP Прочее
Преобразование строк в HTML-код на PHP
Существует распространенная Web-атака под названием Cross-Site Scripting (XSS). Например, пользователь специально вводит некоторые данные, например код JavaScript, в Web-форму, а затем Web-страница отображает эту информацию дословно, без надлежащей обработки специальных символов. Стандартные примеры такой ситуации связаны с гостевыми книгами или форумами. Люди вводят текст, чтобы другие его могли увидеть.


Код
<?PHP  
$input = '<script>alert("Сайт взломан");</script>';  
echo htmlspecialchars($input) . '<br>';  
echo htmlentities($input);  
?>


В данном случае нужно было удалить определенную разметку HTML. Не будем долго останавливаться на этой теме, просто скажем: все поппытки внедрения сценариев JavaScript в данные, отловить практически невозможно. Они выполняются не только с помощью тега <script>, но и посредством других элементов HTML, например <img onabort="badcode()">. Следовательно, в большинстве случаев следует удалять весь HTML-код.
Проще всего это сделать, вызвав функцию htmlspecialchars(), которая проверяет строки в HTML-коде и заменяет все символы < и > сочетаниями < и >. Другая возможность - вызвать функцию htmlentities(). В результате для представления символов будут использованы объекты HTML (если это возможно).

Использование функций htmlspecialchars() и htmlentities() просто позволяет вывести на экран то, что пользователь набирает в браузере. Таким образом, если пользователь вводит разметку HTML, эта разметка показывается. Следовательно, функции htmlspecialchars() и htmlentities() удобны для браузера, но могут быть неудобны для пользователя.

Впрочем, существует фунция strip_tags(), которая полностью избавляется от всех элементов HTML. Если вы просто хотите сохранить некоторые элементы (например, какое-то элементарное форматирование, задаваемое посредством тегов <b>, <i> и <br>), во втором параметре функции strip_tags() следует представить список разрешенных значений.


Код
<?PHP  
$input = 'Hello <b><i>world</i></b>' .  
'<script>alert("Сайт взломан");</script>';  
echo strip_tags($input, '<b><br><i>');  
?>


В результате видно, что все нежелательные теги HTML удалены, но содержимое осталось без изменений.
PHP 7983 04.01.2010
Материалы по теме: