Pull to refresh

Проверка на 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, но снижает вероятность уязвимости.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.