2015-02-15 2 views
4

Я использую Symfony2 witch Sencha Ext JS как интерфейс.Уязвимость Symfony2 для XSS-атак

Я обнаружил, что мои формы уязвимы для атак XSS. Я знаю, что у Symfony2 есть механизмы, которые защищают наши данные от этих атак, однако эти механизмы в основном используют шаблоны для этого, которые я не использую.

Я собираю много данных из фронтовых полей, которые передаются на сервер. Я хочу исправить эту проблему с минимальными усилиями.

Моя цель - защитить мое приложение до того, как данные попадут в базу данных. И есть два варианта, которые у меня на уме.

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

  • Во-вторых, необходимо добавить strip_tags на уровне сущности на выбранные уязвимые поля.

Оба варианта кажутся мне недостаточными из-за количества кода.

Возможно, есть хорошая идея добавить код в интерфейс Sencha? Я не уверен, что делать.

Спасибо за советы!

+1

Если вы считаете, что у Symfony2 есть уязвимость системы безопасности, вы должны сразу же сообщить им конфиденциально и не сообщать об этом здесь. Тем не менее, более вероятно, что вулль появляется в силу того, как вы используете Symfony2, и в этом случае читателям, вероятно, потребуется увидеть ваш код. – halfer

+0

Моя мысль заключалась в том, что механизм доступен только в шаблоне Symfony2. Мой вопрос касается политики безопасности в Symfony относительно атак XSS без шаблона. – Szaman86

+0

Вы имеете в виду также без php? –

ответ

1

Если вы не используете шаблонизатор (который я настоятельно рекомендую, чтобы предотвратить XSS атак), вам необходимо побеге всех пользовательских данных с помощью этого:

htmlspecialchars($string, ENT_QUOTES); 

Вы можете добавить другой уровень безопасности путем внедрения Content Security Policy и его нонса аргумент - это случайным образом длинная строка, что вам нужно добавить к каждому тег сценария следующим образом:

<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%, просто защитная сетка.

Остерегайтесь, что строка nonce ДОЛЖНА быть разной по каждому запросу. Вы можете достичь этого слушателем Symfony. Я написал подробный tutorial on the Symfony implementation of CSP.