Фильтрация 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,'<');
, но, конечно, это препятствует использованию любого HTML. Вот почему существуют BBCode, Markdown и другие подобные языки: для предоставления функций форматирования без предоставления пользователю разрешения на публикацию произвольного кода.
Кроме того, просто искать вещи по шаблону /\bon[a-z]+=/i
Есть много инструментов, называемых очистителями HTML. Вы можете попробовать это, например.