Мы обсудим опасности несанкционированного вывода и предоставим безопасный способ отображения форматированного вывода.
Нет опасности фильтрации вывода
сломать
свою выходную страницу, например, кто-то может злонамеренно встроить JavaScript в поле ввода, которое он отправляет:
Это
мой комментарий.
здесь!')">.
Таким образом, даже если пользователь не является злонамеренным, некоторые из ваших HTML-выражений будут повреждены, например, внезапное прерывание таблицы или неполное отображение страницы.
Показывать только неформатированный текст
Это самое простое решение: вы просто отображаете предоставленную пользователем информацию в виде неформатированного текста. Используйте функцию htmlspecialchars() для преобразования всех символов в кодировку HTML.
Например, <b> будет преобразован в <b>, что гарантирует, что неожиданные HTML-теги не будут выводиться в неподходящее время.
Это хорошее решение, если ваших пользователей интересует только неформатированный текстовый контент. Но было бы лучше, если бы вы предоставили ему возможность форматирования.
Форматирование с помощью пользовательских тегов разметки
Собственные теги пользователя для форматирования.
Вы можете предоставить пользователям специальные теги. Например, вы можете разрешить использование [b]...[/b] для выделения отображения, [i]. .[/i ] Отображение курсивом, просто выполните простую операцию поиска и замены: $output = str_replace("[b]", "<b>", $output);
$output = str_replace("[i]", " <i >", $output);
Более того, мы можем разрешить пользователю вводить некоторые ссылки. Например, пользователю будет разрешено вводить [link="url"]...[/link], что
на данный момент
мы преобразуем в оператор <a href="">...</a>., мы не можем использовать простой поиск. Замену следует выполнять с помощью регулярных выражений:
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">' , $output);
Выполнение ereg_replace() заключается
в поиске строки, в которой появляется [link="..."] и замене ее на <a href="...">
[[:graph:]] означает любое непустой символ. Регулярные выражения см. в соответствующих статьях.
Функция format_output() в файле outputlib.php обеспечивает преобразование этих тегов. Общий принцип таков: China Network Management Alliance bitsCN.com
вызывает htmlspecialchars() для преобразования HTML-тегов в специальные кодировки, фильтрации HTML-тегов, которые не должны отображаться. а затем преобразуйте ряд наших пользовательских тегов в соответствующие теги HTML.
Пожалуйста, смотрите исходный код ниже:
<?php
function format_output($output) {
/****************************************** **********************************
* Берет необработанную строку ($output) и форматирует ее для вывода с помощью специального
* урезана разметка, похожая на HTML
************************************************* * ******************************/
$output = htmlspecialchars(stripslashes($output));
/* новый абзац */
$output = str_replace('[p]', '<p>', $output);
/* смелый */
$output = str_replace('[b]', '<b>', $output);
$output = str_replace('[/b]', '</b>', $output);
/* курсив */
$output = str_replace('[i]', '<i>', $output);
$output = str_replace('[/i]', '</i>', $output);Управление сетью bitscn_com
/* отформатировано */
$output = str_replace('[pre]', '<pre>', $output);
$output = str_replace('[/pre]', '</pre>', $output);
/* блоки с отступом (блочная кавычка) */
$output = str_replace('[indent]', '<blockquote>', $output);
$output = str_replace('[/indent]', '</blockquote>', $output);
/* якоря */
$output = ereg_replace('[anchor="([[:graph:]]+)"]', '<a name="1"></a>', $output);
/* ссылки, обратите внимание, что мы стараемся предотвратить использование JavaScript в ссылках */
$output = str_replace('[link="javascript', '[link=" javascript', $output);
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">', $output);
$output = str_replace('[/link]', '</a>', $output);
вернуть nl2br($выход);
}
?>
Некоторые примечания:
Не забудьте заменить пользовательский тег для создания строки тега HTML после вызова функции htmlspecialchars(), а не перед этим вызовом, иначе ваша тяжелая работа будет потрачена впустую после вызова потока htmlspecialchars().
После
преобразованияфайла управления сетью bitscn_com
HTML-код поиска будет заменен. Например, двойные кавычки «становятся».Функция nl2br() преобразует символы возврата каретки и перевода строки в теги <br>. быть после htmlspecialchars().
При преобразовании [link=""] в <a href=""> вы должны убедиться, что отправитель не будет вставлять JavaScript. Простой способ изменить [link="javascript на [link=" javascript] Нет. замена, просто отобразите исходный код.
outputlib.php
вызывает test.php в браузере. Вы можете увидеть использование format_output().
Обычный HTML-тег нельзя использовать, замените его следующим специальным тегом:
- это [b]жирный[/b].
- это [i]курсив[/i]
- это [link=" http://www.phpbuilder.com"] ссылка[/link]
- это [anchor="test"]якорь и [link="#test"]ссылка[/link] на
[p]абзац
якоря
[pre]Предварительно отформатированный[/pre]
[indent]Чересстрочный текст[/indent]
Конечно
, вы можете добавлять дополнительные теги в соответствии с вашими потребностями. Network Management Alliance bitsCN@com.
Заключение.
В этом обсуждении представлен метод безопасного отображения пользовательского ввода, который можно использовать. можно использовать на
доске объявлений. Пользователи предлагают системные объявления
в следующих программах.
система ББС