Я пытаюсь использовать MathJaxкак часть нашего веб-приложения, которое использует довольно строгую политику безопасности контента (CSP). Проблема в том, что MathJax закодирован для использования eval()
[точнее, в форме Function()
], которая по умолчанию не считается безопасной CSP.
В настоящее время я использую следующий заголовок CSP:
X-Content-Security-Policy: allow 'self'; img-src *; media-src *; frame-src *; font-src *; frame-ancestors 'none'; style-src *; report-uri '/:save-csp-violation';
Это приводит к сбою кода MathJax 2.0, поскольку он использует Function()
. Я пытался разрешить unsafe-eval (т.е. Function()
) только для MathJax, расположенного в том же источнике ниже пути /:static/math/
. Для этого я попытался добавить
unsafe-eval '/:static/math/*'
, чтобы полный заголовок выглядел как
X-Content-Security-Policy: allow 'self'; img-src *; media-src *; frame-src *; font-src *; frame-ancestors 'none'; style-src *; report-uri '/:save-csp-violation'; unsafe-eval '/:static/math/*'
, но я все еще не могу запустить код в Firefox 13.0. Я получаю сообщение об ошибке в веб-консоли Firefox (находится в меню «Инструменты» — «Веб-разработчик»):
[10:09:59.072] call to Function() blocked by CSP @ http://localhost:8080/:static/math/2.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML:29
Однако я не получаю отчет CSP в «report-uri». (Как видите, в настоящее время я запускаю тест через собственный локальный порт без SSL, если это имеет значение. Двоеточие перед static
не является опечаткой, я резервирую все части пути, начинающиеся с двоеточие для внутреннего использования приложения, весь пользовательский контент может свободно определять другие URL-адреса.)
Является ли мое использование атрибута unsafe-eval
неправильным или невозможно разрешить unsafe-eval только для подмножества 'self'?Цель состоит в том, чтобы разрешить unsafe-eval только для того же префикса исходного пути /:static/math
, строгое выполнение кода CSP JS для ' self
' и не JS-код для любого другого метода.