лучший способ защитить простой wysiwyg с помощью php

Я добавил простой редактор wysiwyg на моем сайте. (он позволяет только B / I / U – не более)
В настоящее время я сохраняю весь контент как html в своей базе данных – но atm просто добавить <a onclick='...'> или другой вредоносный код)

Как лучше всего в PHP правильно разбирать вход? Как реализовать <b></b> <i></i> и т. Д. Как белый список и кодировать все остальное?

HTMLPurifier

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

Он не будет защищать вашу форму, и вы можете убить своих пользователей.

Крис Шрифтлетт в своем блоге написал отличный абзац

Я ненавижу комментировать блоги, где мой комментарий передается через что-то вроде strip_tags (), эффективно искажая то, что я пытаюсь сказать. Это напоминает мне об использовании IM-клиента, который пытается идентифицировать смайлики и заменять их изображениями, часто делая сообщения трудными для расшифровки.

Еще одна причина

Кто-то еще в другом ответе также написал это, что мне нравится:

  $str = "10 appels is <than 12 apples"; var_dump(strip_tags($str)); 

Выход, который я получаю:

 string '10 appels is ' (length=13) 

Я лично не буду использовать ничего, кроме HTMLPurifier

HTMLPurifier

HTMLPurifier

Попробуйте демонстрацию здесь: http://htmlpurifier.org/demo.php

И посмотрите на этот похожий вопрос

Используйте strip_tags() . http://php.net/manual/en/function.strip-tags.php

string strip_tags (строка $ str [, строка $ allowable_tags])

Второй параметр – список допустимых тегов; просто перечислите '<b><i><u>' а остальные будут удалены.

Обратите внимание, что в качестве упоминания о deceze:

Эта функция не изменяет никаких атрибутов в тегах, которые вы разрешаете использовать allowable_tags, включая атрибуты стиля и onmouseover, которые может оскорбительный пользователь может злоупотреблять при публикации текста, который будет показан другим пользователям.

Таким образом, он не обеспечивает полную защиту от вредоносного кода сам по себе!