Какой лучший способ корректного фильтра для редактора HTML в PHP?

#php #editor #filter #javascript

#php #редактор #Фильтр #javascript

Вопрос:

Я использую редактор TinyMCE на своем сайте. Я хочу изучить способ правильного фильтра для моего ввода при вставке в DB. Какие фильтры необходимо использовать? Например, я получаю этот ввод в БД таким образом;

 $example = $_POST['example'];

<textarea name="example"></textarea>
  

Я не использую htmlscepialchars(); потому что мне нужны html-теги.

«Извините за мой плохой английский».

Комментарии:

1. Вопрос не ясен. Куда вы будете складывать содержимое $example . Чего вы хотите не допустить?

2. @Artefacto я хочу разрешить html-теги, но я хочу блокировать нежелательные sql-запросы и другие нежелательные коды.

Ответ №1:

HTMLPurifier.

Скачать его можно здесь: http://htmlpurifier.org /

Включите его:

 include 'path/to/HTMLPurifier.auto.php';
  

Используйте его:

 $config = HTMLPurifier_Config::createDefault();
$config->set('Core', 'Encoding', 'UTF-8');
$config->set('XHTML', 'Doctype', 'XHTML 1.0 Strict');
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify( $dirty_html );
  

И спите спокойно, зная, что в HTML, очищенном подобным образом, нет XSS-атак.

Люди, предлагающие mysql_real_escape_string(), вероятно, не поняли вашего вопроса (или я не понял), вы спрашивали, как фильтровать HTML-разметку из редактора WYSIWYG, чтобы ее можно было безопасно сохранить в базе данных.

mysql_real_escape_string() уместен в качестве защиты от внедрения SQL, но подготовленные инструкции (Google «PDO») лучше подходят для этого.

Ответ №2:

Если я правильно понимаю, вы хотите сохранить html в своей базе данных и вам нужен какой-то способ его кодирования?

Вы могли бы сделать следующее перед сохранением в БД:

 urlencode($_POST['example']);
  

И когда вы извлекаете, вы можете urldecode($data);

Комментарии:

1. Есть ли причина, по которой я проголосовал против? Ответ, который я дал, является жизнеспособным решением — так что, кто бы ни проголосовал против, лучше выйдите вперед и объясните, почему они считают, что это не так…