PHP - HTML очиститель - привет w <o> rld/world tutorial striptags
Я просто изучаю использование очистителя HTML, чтобы убедиться, что введенная пользователем строка (которая представляет имя человека) дезинфицирована.
Я не хочу разрешать любые html-теги, script, разметку и т.д. - Мне просто нужны буквы, цифры и нормальные знаки пунктуации.
Огромное количество опций, доступных для очистителя HTML, является довольно сложным, и, насколько я вижу, документы, похоже, не имеют начального/среднего или конечного
см. http://htmlpurifier.org/docs
Есть ли простой учебник по миру приветствия для HTML-очистителя, который показывает, как очистить строку, удаляя из нее все плохие вещи.
Я также рассматриваю просто использование стриптиз-тегов:
или PHP в дезинформировании данных
Ответы
Ответ 1
Я использую HTMLPurifier для дезинфекции вывода богатого текстового редактора и в итоге:
include_once('htmlpurifier/library/HTMLPurifier.auto.php');
$config = HTMLPurifier_Config::createDefault();
$config->set('Core', 'Encoding', 'UTF-8');
$config->set('HTML', 'Doctype', 'HTML 4.01 Transitional');
if (defined('PURIFIER_CACHE')) {
$config->set('Cache', 'SerializerPath', PURIFIER_CACHE);
} else {
# Disable the cache entirely
$config->set('Cache', 'DefinitionImpl', null);
}
# Help out the Purifier a bit, until it develops this functionality
while (($cleaner = preg_replace('!<(em|strong)>(\s*)</\1>!', '$2', $input)) != $input) {
$input = $cleaner;
}
$filter = new HTMLPurifier($config);
$output = $filter->purify($input);
Основные достопримечательности:
- Включить автозагрузчик.
- Создайте экземпляр
HTMLPurifier_Config
как $config
.
- При необходимости настройте параметры конфигурации, используя
$config->set()
.
- Создайте экземпляр
HTMLPurifier
, передав ему $config
.
- Используйте
$filter->purify()
на вашем входе.
Тем не менее, он полностью переполняет то, что не требует разрешения HTML на выходе.
Ответ 2
Вы должны выполнить проверку ввода на основе содержимого - например, вместо использования некоторого регулярного выражения для имени
'/([A-Z][a-z]+[ ]?)+/' //ascii only, but not problematic to extend
эта проверка должна хорошо выполнять эту работу. И затем избегайте вывода при печати на странице с предпочтительным htmlspecialchars.
Ответ 3
Вы можете использовать someting как htmlspecialchars(), чтобы сохранить символы, введенные пользователем, без интерпретации браузера.
Ответ 4
Я всегда думал, что класс очистки Codeigniter xss был неплохим, но совсем недавно я обратился к Кохане.
Посмотрите на свой метод xss_clean
http://github.com/kohana/core/blob/c443c44922ef13421f4a3af5b414e19091bbdce9/classes/kohana/security.php
Ответ 5
Самый простой способ удалить все небуквенные символы из строки, я думаю, это использовать RegEx.Replace() следующим образом:
Regex.Replace(stringToCleanUp, "[\ W]", "");
В то время как \w (нижний регистр) соответствует любому символу слова, эквивалентному [a-zA-Z0-9_]
\ W соответствует любому символу, отличному от слова, т.е. все, что НЕ соответствует \w.
В приведенном выше коде будет использоваться \W (в верхнем регистре) и ничего не заменяется.
В качестве альтернативы, если вы не хотите разрешать подчеркивание, вы можете использовать [^ a-zA-Z0-9], например:
Regex.Replace(stringToCleanUp, "[^ a-zA-Z0-9]", "");
Ответ 6
Если вы пытаетесь избежать атак с инъекциями кода, просто просмотрите данные и сохраните их и распечатайте, как введенный пользователем.
Например: если вы хотите избежать проблем с SQL Injection в MySQL, используйте функцию mysql_real_escape_string()
или аналогичную для дезинфекции предложения SQL. *
Другой пример: запись данных в документ HTML, анализ данных с помощью html_entities()
, поэтому данные будут отображаться как ввод пользователем.
Ответ 7
Для простоты вы можете использовать strip_tags()
или заменить вхождения <, > , и и <
, >
и &
соответственно. Это определенно не лучшее решение, но самое быстрое.
Ответ 8
я обычно очищаю все пользовательские данные перед отправкой в мою базу данных со следующими
mysql_reql_escape_string( htmlentities( strip_tags($str) ));
Ответ 9
Нашел это неделю назад... ЛЮБИТЕ его.
"Простой PHP DOM-парсер PHP, написанный на PHP5 +, поддерживает недействительный HTML и обеспечивает очень простой способ обработки элементов HTML".
http://simplehtmldom.sourceforge.net/
// Example
$html = str_get_html("<div>foo <b>bar</b></div>");
$e = $html->find("div", 0);
echo $e->tag; // Returns: " div"
echo $e->outertext; // Returns: " <div>foo <b>bar</b></div>"
echo $e->innertext; // Returns: " foo <b>bar</b>"
echo $e->plaintext; // Returns: " foo bar"
Вы также можете прокручивать и удалять отдельные теги и т.д. Документы и примеры довольно хороши... Я нашел его простым в использовании в нескольких местах.: -)