Безопасность
Анализ CSP
Разбирает готовую политику по директивам и показывает, где она не защищает: unsafe-inline, звёздочки, забытый base-uri.
Можно вставить вместе с именем заголовка — оно отрежется.
Оценка
F
2 из 100
Серьёзных дыр
3
Предупреждений
4
Директив в политике
4
Что нашлось
'unsafe-inline' в script-src
script-srcЛюбой встроенный скрипт выполняется — это ровно то, от чего защищает CSP. Замените на nonce или хеш.
'unsafe-eval' в script-src
script-srcРазрешает eval, конструктор Function и setTimeout со строкой. Обычно тянется за старой библиотекой шаблонов.
object-src разрешает больше, чем 'none'
object-srcЧерез <object> и <embed> обходят ограничения на скрипты.
base-uri не задан
base-uriВнедрённый тег <base> переписывает все относительные адреса страницы, включая пути к скриптам. Нужен base-uri 'self' или 'none'.
frame-ancestors не задан
frame-ancestorsСтраницу можно встроить в чужой iframe — это кликджекинг. X-Frame-Options закрывает то же самое, но хуже.
form-action не задан
form-actionВнедрённая форма отправит данные на чужой сервер.
'unsafe-inline' в style-src
style-srcВстроенные стили опаснее, чем кажется: через них вытаскивают токены из разметки. Но убрать их обычно тяжело — это меньшее из зол.
Нет upgrade-insecure-requests
Директива сама переписывает http-ссылки на https — дешёвая страховка от смешанного содержимого.
Директивы по порядку
| Директива | Источники | Известна |
|---|---|---|
| default-src | 'self' | да |
| script-src | 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.example.com | да |
| style-src | 'self' 'unsafe-inline' | да |
| img-src | * | да |
Как могло бы быть
Уже разрешённые источники сохранены, недостающие директивы добавлены. Значение {RANDOM} сервер обязан менять на каждый ответ.
default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src *; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'; form-action 'self'; upgrade-insecure-requests
Что CSP не умеет
Политика ограничивает, откуда браузер берёт код и данные, — но не проверяет, что делает разрешённый скрипт. Если в список внесён сторонний домен аналитики, взлом этого домена обойдёт всю политику. Отсюда и рекомендация вместо списка доменов использовать одноразовый nonce вместе с 'strict-dynamic': тогда доверие получают только те скрипты, которые вы разметили сами.