Предотвращение XSS-атак по всему сайту - PullRequest
6 голосов
/ 03 сентября 2010

Я новичок в ColdFusion, поэтому я не уверен, есть ли простой способ сделать это. Мне поручили исправлять XSS-уязвимости по всему сайту на этом CF-сайте. К сожалению, есть тонны страниц, которые принимают пользовательский ввод, и было бы почти невозможно войти и изменить их все.

Есть ли способ (в CF или JS) легко предотвратить XSS-атаки по всему сайту?

Ответы [ 4 ]

36 голосов
/ 03 сентября 2010

Я не хочу об этом говорить, но -

  1. XSS - это проблема с выводом, не - это проблема с вводом.Фильтрация / проверка ввода - это дополнительный уровень защиты, но он никогда не сможет полностью защитить вас от XSS.Взгляните на XSS шпаргалку RSnake - слишком много способов избежать фильтра.
  2. Нет простого способа исправить устаревшее приложение.Вы должны правильно закодировать все, что вы поместили в свои файлы html или javascript, и это означает, что нужно пересмотреть каждый фрагмент кода, который генерирует html.для получения информации о том, как предотвратить XSS.

    Некоторые комментарии ниже предполагают, что проверка входных данных является лучшей стратегией, а не кодированием / экранированием во время вывода.Я просто процитирую из Шпаргал по предупреждению XSS OWASP -

    Традиционно проверка входных данных была предпочтительным подходом для обработки ненадежных данных.Однако проверка входных данных не является отличным решением для инъекционных атак.Во-первых, проверка входных данных обычно выполняется при получении данных до того, как пункт назначения известен.Это означает, что мы не знаем, какие символы могут быть значимыми в целевом интерпретаторе.Во-вторых, и, что еще важнее, приложения должны допускать ввод потенциально опасных символов. Например, следует ли запретить регистрации бедного мистера О'Мэлли в базе данных просто потому, что SQL считает «специальным символом?»

    Для уточнения - когда пользователь вводит строку, такую ​​как O'Malley, вы не знаете, нужна ли вам эта строка в javascript, или в html, или в каком-либо другом языке.Если он в javascript, вы должны отобразить его как O\x27Malley, а если в HTML, он должен выглядеть как O'Malley.Вот почему рекомендуется, чтобы в вашей базе данных строка хранилась в точности так, как пользователь ввел , а затем вы соответственно экранировали ее в соответствии с конечным назначением строки.

1 голос
/ 03 сентября 2010

Одна вещь, на которую вы должны обратить внимание, это реализация брандмауэра приложений, такого как Portcullis: http://www.codfusion.com/blog/page.cfm/projects/portcullis, который включает в себя гораздо более сильную систему, чем встроенный scriptProtect, который легко победить.

Это хороший стартточка для предотвращения многих атак, но для XSS вы в конечном итоге зайдете вручную и убедитесь, что используете такие вещи, как HTMLEditFormat () на любых выходных данных, которые могут быть затронуты клиентской стороной или данными клиента длязапретить вывод действительного html / js-кода.

0 голосов
/ 03 сентября 2010

Помимо применения всех исправлений и исправлений ColdFusion вы также можете:

  1. Не полное доказательство, но помогает, Установите следующее в CFADMIN> Настройки> «Включить глобальную защиту скриптов»
  2. Добавить CSRFToken в ваши формы http://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
  3. Проверьте http Referer
  4. Добавить проверку для всех пользовательских данных
  5. Используйте cfqueryparam для ваших запросов
  6. Добавить HTMLEditFormat () на любые выходы
  7. Помимо отличного блога Питера Фрейтага, вы также должны подписаться на Джейсон Дин http://www.12robots.com
0 голосов
/ 03 сентября 2010

В ColdFusion 9 Livedocs описывается настройка, называемая "scriptProtect", которая позволяет использовать защиту Coldfusion.Я еще не использовал его, так что я не уверен, насколько он эффективен.

Однако, если вы реализуете сторонний или собственный метод обработки, вы, скорее всего, захотите поставитьэто происходит в событии "onRequestStart" приложения, чтобы позволить ему обрабатывать весь сайт, когда дело доходит до нарушений области URL и FORM (поскольку каждый запрос будет выполнять этот код).

...