Как стать автором
Обновить

Проверка на XSS уязвимости, сайта на основе Yii2

В yii по умолчанию используется шаблонизатор для view чистый php. К сожалению, это может привести к ошибкам экранирования вывода. Разработчик выводимый контент должен экранировать, используя Html::encode(), либо аналог. Обычно, для поиска подобных ошибок, пентестер забивает во все возможные поля форм код вида:

<script>alert(document.cookie);</script>


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

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

Пример автоматического добавления c gist: gist.github.com/analitic1983/2c0efa3b70694721a61782c7e820a20f

Ваша логика определения тестовых полей может быть более сложной, но и представленный код отработал свою функцию на нашем проекте.

Тем кто использует функциональные автотесты, можно реализовать возможность проверки исходного кода на странице, если подстрока есть в исходном виде (не экранирована), выдавать ошибку.

Конечно, это не является 100% защитой от xss, но снижает вероятность уязвимости.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Изменить настройки темы