Próbuję użyć MathJax jako części naszej aplikacji internetowej, która używa dość surowego Content Security Policy (CSP). Problem polega na tym, że MathJax jest kodowany do używania eval()
[dokładniej, w postaci Function()
], który nie jest domyślnie uważany za bezpieczny przez CSP.CSP: Jak zezwolić na niebezpieczne eval dla danego prefiksu URI (Firefox)
Używam następujący nagłówek CSP obecnie:
X-Content-Security-Policy: allow 'self'; img-src *; media-src *; frame-src *; font-src *; frame-ancestors 'none'; style-src *; report-uri '/:save-csp-violation';
co powoduje kod mathjax 2.0 niepowodzenie, ponieważ używa Function()
. Próbowałem pozwolić na niebezpieczne-eval (tj. Function()
) tylko dla MathJax zlokalizowanego w tym samym źródle poniżej ścieżki /:static/math/
. Aby to zrobić, próbowałem dodać
unsafe-eval '/:static/math/*'
aby pełny nagłówek wyglądać
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/*'
ale nadal nie mogę Firefox 13.0, aby uruchomić kod. Dostaję komunikat o błędzie Firefox Web Console (znajdujący się w menu Narzędzia - Web Developer):
[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
jednak nie otrzymuję raport CSP do „zgłosić-uri”. (Jak widzisz, obecnie test przeprowadzam przez niestandardowy port localhost bez SSL, w przypadku, który robi różnicę.) Przed dwukropkiem przed static
nie jest literówką, rezerwuję wszystkie części ścieżki zaczynając od dwukropka do wewnętrznego użytku aplikacja, cała treść użytkownika może dowolnie definiować inne adresy URL.)
Czy moje użycie atrybutu unsafe-eval
jest niepoprawne, czy też nie jest możliwe zezwolenie na niebezpieczne eval tylko dla podzbioru "self"? Celem jest zezwolenie na niebezpieczne eval tylko dla tego samego prefiksu ścieżki początkowej /:static/math
, ścisłe wykonanie kodu CSS JS dla 'self
' i bez kodu JS dla jakiejkolwiek innej metody.
Firefox 13.0 zawiera również błąd lub brakującą cechę, że jego nagłówek CSP nie pasuje do wariantu W3C. Zobacz błąd tutaj: https://bugzilla.mozilla.org/show_bug.cgi?id=746978 –