Очиститель PHP-HTML - hello w rld/разделители учебника по миру


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

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

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

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

Есть ли простой онлайн-учебник hello world по очистителю HTML, в котором показано, как очистить строку, удалив из нее все плохое.

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

Или PHP для очистки встроенных данных

Author: JW., 2010-04-20

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);

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

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

Однако это совершенно излишне для того, что не нужно разрешите любой HTML-код в выводе.

 9
Author: eswald, 2011-10-19 22:41:32

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

'/([A-Z][a-z]+[ ]?)+/' //ascii only, but not problematic to extend

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

 0
Author: Mikulas Dite, 2010-04-27 08:12:05

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

 0
Author: NeuroScr, 2010-04-30 11:33:36

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

Взгляните на их метод xss_clean

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

 0
Author: Andrei Serdeliuc ॐ, 2010-08-16 16:39:06

Очиститель 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;
}
 0
Author: Don'tDownvoteMe, 2018-09-26 14:21:50

Самый простой способ удалить все не буквенно-цифровые символы из строки, я думаю, это использовать регулярное выражение.Заменить() следующим образом:

Регулярное выражение.Заменить(Stringtocleanup, "[\W]", "");

В то время как \w (в нижнем регистре) соответствует любому символу "слово’, эквивалентному [a-za-Z0-9_] \W соответствует любому "не-словесному’ символу, т. Е. все, что НЕ соответствует \w. Приведенный выше код будет использовать \W (в верхнем регистре) и заменять результаты ничем.

В качестве альтернативы, если вы не хотите разрешать подчеркивание, которое вы можно использовать [^a-za-Z0-9], например:

Регулярное выражение.Заменить(Stringtocleanup, "[^a-za-Z0-9]", "");

 -1
Author: omadmedia, 2010-04-21 08:39:23

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

Например: Если вы хотите избежать проблем с внедрением SQL в MySQL, используйте функцию mysql_real_escape_string() или аналогичную, чтобы очистить предложение SQL. *

Другой пример: Записывая данные в HTML-документ, проанализируйте данные с помощью html_entities(), чтобы данные выглядели так, как будто их вводит пользователь.

 -1
Author: fjfnaranjo, 2010-04-29 16:11:12

Для простоты вы можете либо использовать strip_tags(), либо заменить вхождения и & на &lt;, &gt;, и &amp; соответственно. Это определенно не лучшее решение, но самое быстрое.

 -1
Author: Propeng, 2010-05-24 10:59:39

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

mysql_reql_escape_string( htmlentities( strip_tags($str) ));
 -2
Author: David Morrow, 2010-05-17 17:04:58

Нашел это неделю назад... Мне это нравится.

"Простой синтаксический анализатор 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"

Вы также можете просматривать и удалять отдельные теги и т.д. Документы и примеры довольно хороши... Я нашел его простым в использовании во многих местах. :-)

 -2
Author: user351502, 2010-05-27 01:05:26