В yii по умолчанию используется шаблонизатор для view чистый php. К сожалению, это может привести к ошибкам экранирования вывода. Разработчик выводимый контент должен экранировать, используя Html::encode(), либо аналог. Обычно, для поиска подобных ошибок, пентестер забивает во все возможные поля форм код вида:
<script>alert(document.cookie);</script>
<script>alert(document.cookie);</script>
Потом проходиться по всему проекту и смотрит что упало. Но иногда бывает, что форма выводиться не полностью. Если же атрибуты будут посланы явно отдельным запросом Post, то будут загружены в модель. Либо сейчас заполнить атрибут через форму пользователь не может, и все хорошо, а через месяц форма меняться, параметр становиться доступен для редактирования, и где-то в совсем другой части проекта проявляется XSS.
Предлагаю простой способ облегчить жизнь пентестера. Автоматически добавлять в текстовые поля всех моделей ActiveRecord вышеуказанный javascript код.
Пример автоматического добавления c gist: gist.github.com/analitic1983/2c0efa3b70694721a61782c7e820a20f
Ваша логика определения тестовых полей может быть более сложной, но и представленный код отработал свою функцию на нашем проекте.
Тем кто использует функциональные автотесты, можно реализовать возможность проверки исходного кода на странице, если подстрока есть в исходном виде (не экранирована), выдавать ошибку.
Конечно, это не является 100% защитой от xss, но снижает вероятность уязвимости.
Автор: Наташа