Возможны ли XSS-атаки при использовании собственного санитайзера?

  • 23 августа 2023 г. 7:16
Ответы на вопрос 2
Несмотря на то, что ваш коллега сделал попытку создать собственный санитайзер, который фильтрует пользовательский ввод, нельзя гарантировать, что его код обеспечивает полную защиту от XSS-атак. Это связано с тем, что обходы фильтрации могут быть очень сложными и зависят от многих факторов, таких как контекст использования, версия PHP и т.д.

Несмотря на добавление третьей строки, которая удаляет атрибуты, приведенный вами payload по-прежнему может быть успешно использован для XSS-атаки. Можно обойти фильтрацию, используя различные техники, такие как использование символов Unicode, различных метасимволов для обхода регулярных выражений и т.д.

Обратите внимание, что использование собственного санитайзера может быть небезопасным, поскольку он может содержать ошибки или пропускать определенные типы атак. Рекомендуется использовать проверенные и надежные библиотеки или инструменты для защиты от XSS-атак.

Может быть полезно провести нагрузочное тестирование и попытаться использовать различные варианты XSS-зондов/эксплойтов, чтобы убедиться в надежности вашего санитайзера.
Я бы не рекомендовал заниматься переработкой этого кода, а вместо этого предлагаю его полностью удалить и заменить новым вариантом. Вот мои рекомендации для реализации:

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

2. При выводе текста на экран, необходимо применить функцию htmlspecialchars() для безопасной отрисовки текста. Дополнительно, рекомендуется использовать форматирование в виде маркдауна. Таким образом, вы сможете поддерживать форматирование переводов строк, списков, выделения и прочих элементов.

Если вам нужна проверенная и эффективная библиотека для очистки HTML, я могу порекомендовать две проверенные решения:

1. https://github.com/ezyang/htmlpurifier
2. https://symfony.com/doc/current/html_sanitizer.html

Воспользуйтесь этими решениями, чтобы избежать проблем с безопасностью и предотвратить взломы в вашем проекте.
Похожие вопросы