Я использую Symfony2 ведьму Sencha Ext JS в качестве внешнего интерфейса.
Я обнаружил, что мои формы уязвимы для атак XSS.
Я знаю, что у Symfony2 есть механизмы, которые защищают наши данные от этих атак, однако эти механизмы в основном используют шаблоны для этого, которые я не использую.
Я собираю много данных из передних полей, которые передаются в бэкэнд. Я хочу решить эту проблему с наименьшими усилиями.
Моя цель — защитить свое приложение до того, как данные попадут в базу данных.
И есть 2 варианта, которые у меня на уме.
Во-первых, это добавить функцию strip_tag на слушатели событий жизненного цикла, что прослушать данные preFlush.
Во-вторых, добавить strip_tags на уровень сущности на выбранных уязвимых полях.
Оба варианта кажутся мне недостаточными из-за количества кода.
Может быть, есть хорошая идея добавить код в интерфейс Sencha?
Я не уверен, что делать.
Спасибо за советы!
Если вы не используете шаблонизатор (который я настоятельно рекомендую для предотвращения атак XSS), вам необходимо экранировать все пользовательские данные используя это:
htmlspecialchars($string, ENT_QUOTES);
Ты можешь добавить еще один уровень безопасности осуществляя Политика безопасности контента И его данное время Аргумент — это случайно сгенерированная длинная строка, которую нужно добавить к каждому тегу скрипта следующим образом:
<script nonce="myRandomString"></script>
Затем просто установите новый заголовок CSP в PHP:
header('Content-Security-Policy', 'script-src 'nonce-myRandomString' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; object-src 'none');
Это предотвратит запуск стороннего скрипта в современных браузерах (а именно, в более новых версиях Chrome; но CSP 3 будет реализован в других в ближайшее время, надеюсь). Так что будьте осторожны, это не 100%, а просто сеть безопасности.
Осторожно, что данное время Строка ДОЛЖНА быть разной для каждого запроса.
Вы можете достичь этого с помощью слушателя Symfony. Я написал подробный учебник по реализации CSP Symfony.
Других решений пока нет …