PHP - очиститель HTML - привет w<o>rld / world учебные стэптэги
Я просто пытаюсь использовать HTML Purifier, чтобы гарантировать, что введенная пользователем строка (которая представляет имя человека) очищена.
Я не хочу разрешать какие-либо теги html, сценарии, разметку и т. Д. Я просто хочу использовать буквы, цифры и знаки препинания.
Огромное количество параметров, доступных для очистителя HTML, устрашает, и, насколько я могу судить, у документов, похоже, нет начала, середины или конца.
см.: http://htmlpurifier.org/docs
Существует ли в Интернете простое учебное пособие "Здравствуй, мир" для очистителя HTML, в котором показано, как очистить строку, удалив из нее все плохое.
Я также рассматриваю только использование меток полосы:
или PHP встроенной очистки данных
10 ответов
Я использовал 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 в выводе.
Вы должны сделать проверку входных данных на основе содержимого - например, лучше использовать некоторое регулярное выражение для имени
'/([A-Z][a-z]+[ ]?)+/' //ascii only, but not problematic to extend
эта проверка должна делать работу хорошо. А затем экранируйте вывод при печати на странице с предпочтительными htmlspecialchars.
Я всегда думал, что класс очистки Codeigniter xss был довольно хорошим, но совсем недавно я обратился к Kohana.
Посмотрите на их метод xss_clean
Вы можете использовать что-то вроде htmlspecialchars(), чтобы сохранить символы, введенные пользователем, без интерпретации браузером.
HTMLpurifier в действии. Вы можете написать <?php echo "HELLO";?>
в fname
а также WORLD
в lname
и проверьте вывод.
<?php
include( 'htmlpurifier/htmlpurifier/library/HTMLPurifier.auto.php');
?>
<form method="post">
<input type="text" name="fname" placeholder="first name"><br>
<input type="text" name="lname" placeholder="last name"><br>
<input type="submit" name="submit" value="submit">
</form>
<?php
if(isset($_POST['submit']))
{
$fname=$_POST['fname'];
$lname=$_POST['lname'];
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$fname = $purifier->purify($fname);
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$lname = $purifier->purify($lname);
echo "First name is: ".$fname."<br>";
echo "Last name is: ".$lname;
}
Самый простой способ удалить все не алфавитно-цифровые символы из строки, я думаю, это использовать 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]", "");
Для простоты вы можете использовать strip_tags()
или заменить вхождения <,>и & на <
, >
, а также &
соответственно. Это определенно не лучшее решение, но самое быстрое.
Если вы пытаетесь уклониться от атак с использованием кода, просто скопируйте данные, сохраните и распечатайте их, как ввели пользователь.
Например: если вы хотите избежать проблем с SQL-инъекцией в MySQL, используйте mysql_real_escape_string()
функция или аналог для очистки предложения SQL. *
Другой пример: запись данных в HTML-документ, анализ данных с html_entities()
, так что данные будут отображаться как ввод пользователя.
Нашел это неделю назад... ЛЮБЛЮ это.
"Простой анализатор HTML 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"
Вы также можете перебирать и удалять отдельные теги и т. Д. Документы и примеры довольно хороши... Я нашел, что их легко использовать во многих местах.:-)
Я обычно очищаю весь пользовательский ввод перед отправкой в мою базу данных со следующими
mysql_reql_escape_string( htmlentities( strip_tags($str) ));