Я пытаюсь использовать новые HTTP-заголовки Content Security Policy (CSP) на тестовом сайте. Когда я использую CSP вместе с Modernizr, я получаю ошибки нарушения CSP. Я использую эту политику CSP:
Content-Security-Policy: default-src 'self'; script-src 'self' ajax.googleapis.com ajax.aspnetcdn.com; style-src 'сам'; img-src 'сам'; font-src 'сам'; report-uri /WebResource.axd?cspReport=true
Это ошибки из консоли браузера Chrome:
Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self'".
Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
window.Modernizr.injectElementWithStyles - modernizr-2.7.2.js:134
window.Modernizr.tests.touch - modernizr-2.7.2.js:457(anonymous function)
modernizr-2.7.2.js:949(anonymous function) - modernizr-2.7.2.js:1406
Я обнаружил следующий обходной путь на сайте Github Modernizr. Тем не менее, обходной путь был впервые предложен в марте, и, немного погуглив, я не могу найти никаких исправлений или обходных путей для этой проблемы.
Я знаю, что могу включить директиву unsafe-inline, которая может обойти эту ошибку, но это также позволяет запускать небезопасный код и в первую очередь исключает использование CSP. У кого-нибудь есть решения?
Обновление - что такое CSP
CSP - это HTTP-заголовок, поддерживаемый всеми основными браузерами (включая Edge). По сути, это белый список контента, который браузеру разрешено использовать для отображения страницы. Узнайте больше здесь или прочтите документацию Mozilla для CSP здесь и здесь.
Обновление - выделите CSP
CSP теперь доступен во всех браузерах (Edge добавил поддержку, ура!), И это огромный шаг вперед в веб-безопасность. Для тех, кто заинтересован в получении дополнительной поддержки CSP от третьих лиц, см. Эти материалы:
- Поддержка Modernizr для CSP
- Поддержка Visual Studio для CSP. Обратите внимание, что ссылка в браузере не работает, если у вас включен CSP, поскольку он использует встроенный JavaScript.
- Расширение Visual Studio Web Essentials поддержка CSP. Web Essentials - это надстройка Visual Studio, функции которой часто попадают в следующую версию Visual Studio.