Фильтрация Javascript-инъекций

У меня есть текстовая область, в которой я поставил код проверки, чтобы не допустить <script> теги и теги Javascript, но пользователь может вводить описания, такие как <strong onmouseover=alert(2)>,

Поэтому, когда кто-то наводит курсор на этот строковый тег, появляется окно оповещения JS.

Как я могу остановить этот вид внедрения JavaScript?

3 ответа

Вам нужно будет правильно санировать HTML, который вы разрешаете. Это не тривиально, как вы обнаружили. (Вам, вероятно, нужно запретить iframe и несколько других элементов.)

Для правильной дезинфекции требуется белый список элементов, а внутри них - белый список атрибутов, разрешенных для каждого. Очевидно, что различные onXyz атрибуты не будут в белом списке.

Санитарная обработка должна происходить на стороне сервера, потому что все, что на стороне клиента, можно обойти. Поэтому, не зная, какую серверную технологию вы используете, нельзя что-то порекомендовать. Например, JSoup хорошо известен для Java, но, конечно, это не полезно для вас, если вы не используете Java.:-) Для.Net есть HTML Agility Pack или библиотека Microsoft Anti-XSS, но это очень неполный список.

Простой ответ replace(/</g,'&lt;');, но, конечно, это препятствует использованию любого HTML. Вот почему существуют BBCode, Markdown и другие подобные языки: для предоставления функций форматирования без предоставления пользователю разрешения на публикацию произвольного кода.

Кроме того, просто искать вещи по шаблону /\bon[a-z]+=/i

Есть много инструментов, называемых очистителями HTML. Вы можете попробовать это, например.

Другие вопросы по тегам