Я быстро взглянул на код kses. Я заметил, что:
он основан на том, что символ «>» не присутствует в значениях атрибута (что допустимо)
его обработчик «протокола плохого URL» не будет отфильтровывать вещи, которые он не может проанализировать, например, неправильно сформированные ссылки на символы и управляющие символы.
Не думаю, что я бы действительно этому доверял.
Если вы должны разрешить (и отфильтровать) HTML, вы можете попробовать htmlpurifier . Я не могу поручиться за его безопасность, но он широко используется.
Фильтрация HTML с использованием чего-либо, кроме полного анализатора HTML, hard . Если вы можете предоставить какую-либо альтернативу разрешению пользователю вводить HTML (например, используя упрощенный язык текстовой разметки), сделайте это вместо этого.