Я пытаюсь использовать 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()
. Я попытался разрешить небезопасное 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 Web Console (находится в Инструменты - Веб-разработчик):
[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. (Как видите, в настоящее время я запускаю тест через пользовательский порт localhost без SSL, если это имеет значение. Двоеточие до static
не является опечаткой, я резервирую все части пути, начиная с двоеточия для внутреннего использование приложения, все содержимое пользователя может свободно определять другие URL-адреса.)
Является ли использование атрибута unsafe-eval
неправильным или невозможно разрешить небезопасную-eval только для подмножества "я"?. Цель состоит в том, чтобы разрешить небезопасную-eval только для одного префикса пути происхождения /:static/math
, строгая реализация кода JSP CSP для 'self
' и никакого JS-кода для любого другого метода.