Если вы можете найти любой другой способ разрешить пользователям публиковать контент, который не включает HTML, сделайте это. Существует множество систем разметки на стороне пользователя, которые можно использовать для создания HTML.
Так что я подумывал сделать несколько регулярных выражений, чтобы избавиться от всех тегов сценария и всех атрибутов javascript, таких как onload, onclick и т. Д.
Забудь об этом. Вы не можете обработать HTML с помощью регулярных выражений любым полезным способом. Не говоря уже о безопасности, когда злоумышленники намеренно бросают вам искаженную разметку.
Если вы можете убедить своих пользователей вводить XHTML, это намного проще разобрать. Вы все еще не можете сделать это с помощью регулярных выражений, но вы можете бросить его в простой XML-анализатор и пройтись по результирующему дереву узлов, чтобы проверить, что каждый элемент и атрибут безопасны, и удалить все, которые не являются, затем повторно -serialise.
Очиститель HTML редактирует HTLM, и важно, чтобы HTML поддерживался так, как он был опубликован.
Почему?
Если они могут редактировать его в своем первоначальном виде, то ответ заключается в том, чтобы просто очистить его при выходе из него, чтобы отобразить в браузере, не при входе во время отправки.
Если вы должны позволить пользователям вводить свой собственный HTML в произвольной форме - и вообще я бы советовал против него - тогда HTML Purifier с подходом белого списка (запретите все элементы / атрибуты, которые не являются известно-безопасно) примерно так же хорошо, как и получается. Это очень очень сложно, и вам, возможно, придется держать его в курсе, когда найдены хаки, но это улицы впереди всего, что вы собираетесь взломать себе с помощью регулярных выражений.
Но я не хочу покупать новый домен только для этого.
Вы можете использовать поддомен, если любые токены аутентификации (в частности, файлы cookie) не могут пересекаться между поддоменами. (Что для файлов cookie они не могут по умолчанию, поскольку для параметра домена установлено только текущее имя хоста.)
Доверяете ли вы своим пользователям возможность написания сценариев? Если нет, не позволяйте им иметь его, или вы получите скрипты атаки и фреймы для русских сайтов с эксплойтами и вредоносными программами повсюду ...