Я просто изучаю использование очистителя HTML, чтобы убедиться, что строка, введенная пользователем (которая представляет имя человека), дезинфицирована.
Я не хочу разрешать любые html-теги, скрипты, разметки и т. Д. – мне просто нужны буквы, цифры и нормальные знаки пунктуации.
Огромное количество опций, доступных для очистителя HTML, является довольно сложным, и, насколько я вижу, документы, похоже, не имеют начального / среднего или конечного
см. http://htmlpurifier.org/docs
Есть ли простой учебник по миру приветствия в Интернете для очистителя HTML, который показывает, как очищать строку, удаляя из нее все плохие вещи.
Я также рассматриваю просто использование стриптиз-тегов:
или PHP в построенных данных, дезинфицирующих
Я использую 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 на выходе.
Вы должны сделать проверку ввода на основе содержимого – например, вместо использования некоторого regexp для имени
'/([AZ][az]+[ ]?)+/' //ascii only, but not problematic to extend
эта проверка должна хорошо выполнять эту работу. И затем избегайте вывода при печати на странице с предпочтительными htmlspecialchars .
Вы можете использовать someting как htmlspecialchars (), чтобы сохранить символы, введенные пользователем, без интерпретации браузера.
Я всегда думал, что класс очистки xss Codeigniter неплохой, но совсем недавно я обратился к Кохане.
Посмотрите на их метод xss_clean
Самый простой способ удалить все не буквенно-цифровые символы из строки, я думаю, это использовать 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]", "");
Если вы пытаетесь уклониться от атак с использованием кода, просто просмотрите данные и сохраните их и распечатайте, как введенный пользователем.
Например: если вы хотите избежать проблем с SQL Injection в MySQL, используйте mysql_real_escape_string()
или аналогичную для дезинфекции предложения SQL. *
Другой пример: запись данных в документ HTML, анализ данных с помощью html_entities()
, поэтому данные будут отображаться как ввод пользователем.
Для простоты вы можете использовать strip_tags()
или заменить вхождения <,> и & с <
, >
, и &
, соответственно. Это определенно не лучшее решение, но самое быстрое.
я обычно очищаю все пользовательские данные перед отправкой в мою базу данных со следующим
mysql_reql_escape_string( htmlentities( strip_tags($str) ));
Нашел это неделю назад … ЛЮБИТЕ это.
«Простой 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"
Вы также можете прокручивать и удалять отдельные теги и т. Д. Документы и примеры довольно хороши … Мне было легко пользоваться в нескольких местах. 🙂