PHP – HTML очиститель – привет w <o> rld / world tutorial striptags

Я просто изучаю использование очистителя HTML, чтобы убедиться, что строка, введенная пользователем (которая представляет имя человека), дезинфицирована.

Я не хочу разрешать любые html-теги, скрипты, разметки и т. Д. – мне просто нужны буквы, цифры и нормальные знаки пунктуации.

Огромное количество опций, доступных для очистителя HTML, является довольно сложным, и, насколько я вижу, документы, похоже, не имеют начального / среднего или конечного

см. http://htmlpurifier.org/docs

Есть ли простой учебник по миру приветствия в Интернете для очистителя HTML, который показывает, как очищать строку, удаляя из нее все плохие вещи.

Я также рассматриваю просто использование стриптиз-тегов:

  • http://php.net/manual/en/function.strip-tags.php

или PHP в построенных данных, дезинфицирующих

  • http://us.php.net/manual/en/book.filter.php

Solutions Collecting From Web of "PHP – HTML очиститель – привет w <o> rld / world tutorial striptags"

Я использую 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); 

Основные достопримечательности:

  1. Включите автозагрузчик.
  2. Создайте экземпляр HTMLPurifier_Config виде $config .
  3. Задайте параметры конфигурации, если необходимо, с помощью $config->set() .
  4. Создайте экземпляр HTMLPurifier , передав ему $config .
  5. Используйте $filter->purify() на вашем входе.

Тем не менее, это полностью завышено для чего-то, что не нужно позволять HTML на выходе.

Вы должны сделать проверку ввода на основе содержимого – например, вместо использования некоторого regexp для имени

 '/([AZ][az]+[ ]?)+/' //ascii only, but not problematic to extend 

эта проверка должна хорошо выполнять эту работу. И затем избегайте вывода при печати на странице с предпочтительными htmlspecialchars .

Вы можете использовать someting как htmlspecialchars (), чтобы сохранить символы, введенные пользователем, без интерпретации браузера.

Я всегда думал, что класс очистки xss Codeigniter неплохой, но совсем недавно я обратился к Кохане.

Посмотрите на их метод xss_clean

http://github.com/kohana/core/blob/c443c44922ef13421f4a3af5b414e19091bbdce9/classes/kohana/security.php

Самый простой способ удалить все не буквенно-цифровые символы из строки, я думаю, это использовать 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() или заменить вхождения <,> и & с &lt; , &gt; , и &amp; , соответственно. Это определенно не лучшее решение, но самое быстрое.

я обычно очищаю все пользовательские данные перед отправкой в ​​мою базу данных со следующим

 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" 

Вы также можете прокручивать и удалять отдельные теги и т. Д. Документы и примеры довольно хороши … Мне было легко пользоваться в нескольких местах. 🙂