Я пытаюсь реализовать политику безопасности контента без unsafe-inline и unsafe-eval в веб-приложении asp.net MVC. У этого есть представления (файлы cshtml) со встроенным JavaScript. Я переместил код javascript в отдельные файлы .js и добавил к ним атрибут nonce = "1234567890". Пока одноразовый номер является статическим. Как только мы начнем работать с CSP, мы реализуем динамический одноразовый номер. Проблема в том, что я все еще получаю ошибки оценки в Chrome, несмотря на белый список с одноразовым номером.
Это заявление, которое я имею в виду:
<script type="text/javascript" src="~/Scripts/NET/Work.js" nonce="1234567890"></script>
Это то, что находится в файле js:
(function() {
$("button[type='submit']", "#frmWorkOptions").on("click", function () {
if (_cc._xhrFind)
_cc._xhrFind.abort();
});
$(document).ajaxSend(function (event, xhr, options) {
var match;
match = /\/NET\/Work\/Find/i.test(options.url);
if (match)
_cc._xhrFind = xhr;
});
$("#WorkEditor").focus();
$("#frmWorkOptions").submit();
})();
Этот код используется для вызова представления (AJAX) и добавления содержимого на страницу.
route = _cc.getAction("Index", activity);
var data = { __RequestVerificationToken: token };
$.post(route, data, function (data, status, xhr) {
$div.html(data);
}).fail(function (xhr, status, err) {
alert("An error occurred processing your request. ");
window.location = "/";
});
Я получаю сообщение об ошибке при запуске страницы (в Chrome): отказано в выполнении встроенного сценария, поскольку оно нарушает следующую директиву политики безопасности содержимого: ... Одноразовый номер правильно указан в моем CSP, поскольку я успешно использовал его для белый список других скриптов. Эти скрипты, загруженные html из вызова AJAX, похоже, создают мне проблему. Любая помощь приветствуется.