2016-07-20 7 views
0

У меня есть форма, в которой пользователи могут создавать свой собственный вход с помощью html. Я хочу очистить этот вход на стороне сервера с помощью PHP. Тем не менее, я хочу убедиться, что все входные данные защищены и соответствуют тому, что я бы хотел. У меня уже есть XSS-защита, поэтому это не об удалении скриптов.Удалить определенные теги из ввода html с PHP

Когда пользователь обеспечивает ввод, я хочу, чтобы удалить, кроме p, img, a, hr, br, tbody, tr, td, pre, ul, ol, li и span (в основном все текстовые теги форматирования, кроме дивы). Я хочу удалить любые атрибуты, кроме href, для <a>, src для <img> и style за <p>. Для <p> стиля я хотел бы только сохранить следующие атрибуты:

  • color
  • background-color
  • line-height
  • Все, что начинается с text-

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

Например, как редактор Stack Overflow анализирует и очищает ввод перед сохранением и отображением его пользователю?

Спасибо.

+0

Я не знаю кода, стоящего за редактором SO. Если вы покажете нам свой код, возможно, мы сможем помочь вам его улучшить. – BeetleJuice

+0

Мой код исходит от редактора Summernote. Чтобы уточнить, речь идет о бэкэнде. –

+0

Используете ли вы CKEditor для этого? – eronax59

ответ

2

Я использую http://htmlpurifier.org/ для очистки html-ввода. Вы можете определить теги, атрибуты и стили, которые разрешены. В качестве примера я добавил код из моего проекта.

$configuration = HTMLPurifier_Config::createDefault(); 
    $configuration->set('Attr.EnableID', true); 
    $configuration->set('AutoFormat.RemoveEmpty', true); 
    $configuration->set('AutoFormat.RemoveEmpty.RemoveNbsp', true); 
    $configuration->set('HTML.AllowedAttributes', array('span.style', '*.id', '*.src', 'a.href', 'table.style', 'img.style', 'td.colspan', 'td.rowspan', 'td.style')); 
    $styles = array('margin-left', 'color', 'background-color', 'text-decoration', 'font-weight', 'font-style', 'border', 'border-collapse', 'height'); 
    $configuration->set('CSS.AllowedProperties', $styles); 
    $htmlPurifier = new HTMLPurifier($configuration); 
    return $htmlPurifier->purify($html); 
+0

Awesome. Я действительно использовал это, чтобы очистить скрипты с автоматической настройкой, но я не знал, что это может сделать все это. Благодарю. –