2016-08-17 3 views
4

Может ли XSS быть предотвращено на 100%, установив политику безопасности контента как default-src 'self'? Есть ли способ XSS в этом случае? Одна из возможностей, о которой я могу думать, заключается в том, что вы вводите пользовательский ввод в один из ваших сценариев динамически на стороне сервера, согласны ли вы? Есть ли другие уязвимости, о которых вы можете думать?XSS - Политика безопасности содержимого

ответ

1

CSP не должен использоваться как единственный способ предотвратить атаку XSS. Этот механизм работает только на стороне клиента (если вы храните вредоносные данные в своей БД, тогда вы, вероятно, можете начать заражать другие системы, с которыми вы интегрируетесь) и не реализованы всеми браузерами (http://caniuse.com/#search=csp).

Чтобы предотвратить XSS, вы всегда должны проверять входные данные и кодировать выходные данные. Вы также можете печатать предупреждающее сообщение в консоли JavaScript, чтобы как-то предотвратить атаки Self-XSS (например, открыть страницу facebook и включить инструменты разработки Chrome - посмотрите сообщение на консоли).

Помните, что вход пользователя на веб-сайт не является единственным источником XSS. Вредоносные данные могут также поступать от:

  1. Импорт данных из файлов
  2. Импорт данных из сторонних систем
  3. миграции данных из старой системы.
  4. Cookies и http заголовки.

Если у вас есть соответствующая проверка и кодирование данных (на стороне сервера), вы можете дополнительно применять механизм браузера, такой как: CSP, X-XSS-Protection или X-Content-Type-Options, чтобы повысить вашу уверенность в безопасность вашей системы.

+0

Каких эвристики мы говорим о? Если вы правильно настроите свои правила, у вас не так много возможностей для перевода. Это в значительной степени SPF для Интернета. – Gant

+1

Спасибо за внимание. Я исправил свой ответ. X-XSS-Protection основана на эвристическом не CSP. – cezarypiatek

+0

Есть ли у вас пример того, как вредоносный JS может быть запущен браузером, несмотря на CSR «self» CSR по умолчанию? (Конечно, учитывая, что браузер поддерживает CSP) –

2

Нет, CSP не является волшебной пулей. Это должна быть одна линия обороны, а не вся защита. Если правильно настроен, он может помочь

  • предотвращения полезной XSS, где полезная нагрузка, будь то постоянные или отражение должно быть мало, и поэтому, как правило, просто создать элемент сценария и ввести код внешнего
  • избежать извлечения данных и неправомерного использования в качестве платформы для атаковать другие сайты. В зависимости от того, как работает ваше приложение, доступ к вашему серверному сервису может быть достаточным для извлечения данных, например, если ваши пользователи могут писать сообщения в блогах, злоумышленник может создать новую запись с данными, которые необходимо извлечь, дождаться сигнала, что данные (например, через комментарий) и удалить сообщение снова, все без связи с внешними серверами.
+1

Есть ли у вас пример того, как вредоносный JS может быть запущен браузером, несмотря на то, что CSP по умолчанию «s»? (Конечно, учитывая, что браузер поддерживает CSP) –

+1

Обычно часть впрыска не использует внешние ресурсы. Постоянный XSS - это всего лишь ваша база данных, выгружающая кого-то elses JS, но вы все еще являетесь источником. Отраженный XSS обычно вводится через параметры запроса или запрашивает содержимое тела, снова ваш сервер является тем, обслуживающим Javascript. Если вы можете ввести '', вы также можете ввести '', где предупреждение может следует заменить содержимым 'evil.js' – Gant

+0

Ни один из примеров, описанных выше, не загорелся бы с' default-src 'self''. – oreoshake

2

Чтобы ответить на этот вопрос, да современный браузер с default-src 'self' все еще может выполнить управляемой пользователем JavaScript: JSONP.

Особое примечание - наш недостаток self в нашем списке источников. В то время как поиск JavaScript от self кажется относительно безопасным (и чрезвычайно общий), его следует избегать, когда это возможно.

Есть крайние случаи, когда любой разработчик должен заботиться о , позволяя себе как источник сценариев. Может быть забыта конечная точка JSONP, которая не дезинфицирует имя функции обратного вызова.

От http://githubengineering.com/githubs-csp-journey/

Смежные вопросы