0. Введение

0.1 Немного о безопасности веб-приложений

0.2 Статистика Positive Technologies

0.3 Same-origin policy (SOP)

site.com

обход SOP и является целью большинства клиентских атак

0.4.1 CSRF

0.4.2 XSS

Cross Site Scripting (межсайтовый скриптинг).

Ошибка валидации пользовательских данных, которая позволяет передать JavaScript код на исполнение в браузер пользователя.

HTML-Injection

0.4.2 XSS:reflected (отраженные)

0.4.2 XSS:stored (хранимые)

0.4.2 XSS:dom-base

0.4.2 XSS WARNING!

0.4.3 Information Leakage

0.4.4 Header Injection & Session Fixation

1. Пути решения

1.1 Content Security Policy 1.0 (CSP)

1.1 CSP vs SOP

1.1 CSP1.0:Директивы

default-src 'self' cdn.example.com Значение по умолчанию
script-src 'self' js.example.com Определяет валидные источники JavaScript
style-src 'self' css.example.com Определяет валидные источники стилей
img-src 'self' img.example.com Определяет валидные источники изображений
connect-src 'self' Относится к XMLHttpRequest (AJAX), WebSocket или EventSource. Если не разрешено - браузер генерирует 400 HTTP статус.
font-src font.example.com Определяет валидные источники шрифтов
object-src 'self' Определяет валидные источники плагинов, например <object>, <embed> или <applet>
media-src media.example.com Определяет валидные источники аудио/видео, например HTML5 <audio>, <video> элементы.
frame-src 'self' Deprecated. Определяет валидные источники для фреймов. child-src предпочтительней.
report-uri /some-report-uri Инструкция для браузера опубликовать отчет о сбое политики, POST на указанный URI. так же можно использовать header -Report-Only для описания политик которые нуждаются в отчетах.

1.1 CSP1.0:Source List

* img-src */code> разрешает все URL кроме data: blob: filesystem:
'none' script-src 'self' Позволяет загружать ресурсы с того же same origin ( прицип SOP )
data: img-src 'self' data: Разрешает загрузку ресурсов с data схемы (пример Base64 encoded img).
domain.example.com img-src domain.example.com Разрешает загрузку из специальных источников.
*.example.com img-src *.example.com Разрешает загрузку из поддоменов example.com.
https://cdn.com img-src https://cdn.com Разрешает загрузку только по HTTPS для указанного домена
https: img-src https: Разрешает загрузку только по HTTPS для всех доменов
'unsafe-inline' script-src 'unsafe-inline' Позволяет использовать источники встроенные в элементы, такие как атрибут стиля, OnClick и пр.
'unsafe-eval' script-src 'unsafe-eval' Разрешает небезопасную динамическую подгрузку кода, как eval()

1.1 CSP1.0:Плавный переход

Content-Security-Policy-Report-Only: {your directives}

1.1 CSP1.0:Ограничения

1.2 CSP1.0:Обход (Header Injection)

1.2 CSP1.0:Обход (Scriptless Attacks)

Заключение

Уязвимость сайтов, в первую очередь, в руках разработчиков.
Content Security Policy — хороший инструмент, которым не стоит пренебрегать.
Следите за валидацией.