Я просто изучаю использование Очистителя HTML, чтобы гарантировать, что санирована пользовательская-inputed строка (который представляет имя человека).
Я не хочу позволять любые теги HTML, сценарий, разметка и т.д. - я просто хочу альфу, числовые и нормальные знаки пунктуации.
Чистое число вариантов, доступное для Очистителя HTML, является пугающим и, насколько я вижу, документы, кажется, не имеют beggining/middle или конец
см.: http://htmlpurifier.org/docs
Есть ли простое привет мировое учебное руководство онлайн для Очистителя HTML, который показывает, как санировать строку, удаляющую весь плохой материал из него.
Я также рассматриваю просто теги полосы использования:
или PHP's в созданной очистке данных
Самый простой способ удалить все не буквенно-цифровые символы из строки - использовать 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] "," ");
Вам следует выполнять проверку ввода на основе содержимого - например, лучше использовать какое-то регулярное выражение для имени
'/([A-Z][a-z]+[ ]?)+/' //ascii only, but not problematic to extend
, эта проверка должна хорошо работать.А затем экранировать вывод при печати его на странице с предпочтительными htmlspecialchars .
Если вы пытаетесь избежать атак путем внедрения кода, просто уменьшите размер данных, сохраните и распечатайте их, как ввел пользователь.
Например: если вы хотите избежать проблем с внедрением SQL в MySQL, используйте функцию mysql_real_escape_string ()
или аналогичную для очистки предложения SQL. *
Другой пример: записывая данные в документ HTML, проанализируйте данные с помощью html_entities ()
, чтобы данные выглядели как введенные пользователем.
Вы можете использовать что-то вроде htmlspecialchars() для сохранения символов, введенных пользователем, без интерпретации браузером.
Я обычно очищаю весь пользовательский ввод перед отправкой в базу данных следующим образом
mysql_reql_escape_string( htmlentities( strip_tags($str) ));
Для простоты можно использовать strip_tags ()
или заменить вхождения <,> и & на <
, >
и и
соответственно. Это определенно не лучшее решение, но самое быстрое.
Нашел это неделю назад ... НРАВИТСЯ.
«Простой синтаксический анализатор PHP HTML DOM, написанный на 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"
Вы также можете перебирать и удалять отдельные теги и т. Д. Документы и примеры довольно хороши ... Мне показалось, что их легко использовать во многих местах. : -)
Я всегда считал класс xss-чистки Codeigniter довольно хорошим, но недавно я обратился к Kohana.
Посмотрите на их метод xss_clean