Очиститель PHP-HTML - hello w rld/разделители учебника по миру
Я просто изучаю возможность использования очистителя HTML, чтобы убедиться, что введенная пользователем строка (представляющая имя человека) очищена.
Я не хочу разрешать какие-либо html-теги, сценарии, разметку и т. Д. - Мне просто нужны буквенные, цифровые и обычные знаки препинания.
Огромное количество опций, доступных для очистителя HTML, пугает, и, насколько я вижу, в документах, похоже, нет начала/середины или конца
См.: http://htmlpurifier.org/docs
Есть ли простой онлайн-учебник hello world по очистителю HTML, в котором показано, как очистить строку, удалив из нее все плохое.
Я также рассматриваю возможность просто использовать теги полосы:
Или PHP для очистки встроенных данных
10 answers
Я использовал 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.
Вы можете использовать что-то вроде htmlspecialchars(), чтобы сохранить символы, введенные пользователем, без интерпретации браузером.
Я всегда думал, что класс очистки xss от Codeigniter был довольно хорошим, но совсем недавно я обратился к Кохане.
Взгляните на их метод xss_clean
Очиститель HTML в действии. Вы можете выбрать запись <?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;
}
Самый простой способ удалить все не буквенно-цифровые символы из строки, я думаю, это использовать регулярное выражение.Заменить() следующим образом:
Регулярное выражение.Заменить(Stringtocleanup, "[\W]", "");
В то время как \w (в нижнем регистре) соответствует любому символу "слово’, эквивалентному [a-za-Z0-9_] \W соответствует любому "не-словесному’ символу, т. Е. все, что НЕ соответствует \w. Приведенный выше код будет использовать \W (в верхнем регистре) и заменять результаты ничем.
В качестве альтернативы, если вы не хотите разрешать подчеркивание, которое вы можно использовать [^a-za-Z0-9], например:
Регулярное выражение.Заменить(Stringtocleanup, "[^a-za-Z0-9]", "");
Если вы пытаетесь избежать атак с внедрением кода, просто очистите данные, сохраните и распечатайте их так, как ввел пользователь.
Например: Если вы хотите избежать проблем с внедрением SQL в MySQL, используйте функцию mysql_real_escape_string()
или аналогичную, чтобы очистить предложение SQL. *
Другой пример: Записывая данные в HTML-документ, проанализируйте данные с помощью html_entities()
, чтобы данные выглядели так, как будто их вводит пользователь.
Для простоты вы можете либо использовать strip_tags()
, либо заменить вхождения и & на <
, >
, и &
соответственно. Это определенно не лучшее решение, но самое быстрое.
Обычно я очищаю весь пользовательский ввод перед отправкой в свою базу данных следующим образом
mysql_reql_escape_string( htmlentities( strip_tags($str) ));
Нашел это неделю назад... Мне это нравится.
"Простой синтаксический анализатор 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"
Вы также можете просматривать и удалять отдельные теги и т.д. Документы и примеры довольно хороши... Я нашел его простым в использовании во многих местах. :-)