Проверяем CSP из командной строки
Спецификация политики безопасности контента - это замечательный интерфейсный инструмент безопасности, помогающий предотвратить XSS и другие типы атак. Я бы сказал, что на каждом сайте должен быть реализован как можно более конкретный CSP. Если вы не знакомы с CSP, вот небольшой пример:
Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com
Если связанный ресурс или контент на странице не соответствует заданному правилу CSP, он не будет загружен. Конечно, получить массивный сайт для прохождения одного CSP сложно - просто посетите Facebook:
Браузеры предоставляют вам информацию об ошибках и предупреждениях CSP в веб-консоли, но это не помогает разработчикам предотвращать проблемы перед началом работы. Введите seespee - утилиту Node.js, которая позволяет проверять CSP из командной строки!
Чтобы получить директивы CSP для данной страницы, вы просто запускаете seespee
с URL:
seespee https://davidwalsh.name/demo/csp-example.php
И получим:
Content-Security-Policy:
default-src 'self';
frame-ancestors 'self';
frame-src 'none';
img-src 'none';
media-src 'self' *.example.com;
object-src 'none';
report-uri https://example.com/violationReportForCSP.php;
script-src 'self' 'unsafe-inline' cdnjs.cloudflare.com;
style-src 'self' 'unsafe-inline';
Если вы хотите проверить, валиден ли CSP данной страницы, чтобы вы могли проверять это во время сборки или в CI, добавьте флаг --validate
:
seespee https://davidwalsh.name/demo/csp-example.php --validate
И в результате получите:
✘ ERROR: Validation failed: The Content-Security-Policy does not whitelist the following resources:
script-src cdnjs.cloudflare.com;
https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.js
Если шаг проверки возвращает ненулевое состояние, вы знаете, что CSP не удалось, и, следовательно, исправление не должно быть объединено.
Вы также можете использовать seespee из скриптов Node.js:
var seespee = require('seespee');
seespee('https://davidwalsh.name/demo/csp-example.php').then(function(result) {
console.log(result.contentSecurityPolicy);
// default-src \'none\'; style-src https://assets-cdn.github.com; ...
});
Очень полезно иметь такую утилиту, как seespee, и не проверять браузер вручную. Надежный CSP может быть сложно создать, но еще сложнее поддерживать его при изменении сайта. Используйте seespee и CI для предотвращения нежелательных CSP и сбоев сайта!