Estoy tratando de usar MathJax como parte de nuestra aplicación web que usa bastante estricto Content Security Policy (CSP). El problema es que MathJax está codificado para usar eval()
[para ser exactos, en forma de Function()
] que CSP no considera seguro por defecto.CSP: Cómo permitir inseguro-eval para un prefijo de URI dado (Firefox)
estoy usando actualmente siguiente cabecera 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';
¿Qué hace que el código mathjax 2.0 a fallar, ya que utiliza Function()
. Intenté permitir eval-inseguro (es decir, Function()
) solo para MathJax ubicado dentro del mismo origen debajo de la ruta /:static/math/
. Para hacer eso, he intentado añadir
unsafe-eval '/:static/math/*'
para hacer la cabecera completa parezca
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/*'
pero todavía no puedo Firefox 13.0 para ejecutar el código. Recibo un mensaje de error a la consola web Firefox (que se encuentra en Herramientas - 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
Sin embargo, ahora no recibo un informe a la CSP 'reportar-uri'. (Como puede ver, actualmente estoy ejecutando la prueba a través del puerto localhost personalizado sin SSL, en caso de que eso marque la diferencia. Los dos puntos antes de static
no son un error tipográfico, reservo todas las partes de ruta comenzando con dos puntos para uso interno de la aplicación, todo el contenido del usuario puede definir libremente otras URL.)
¿Es incorrecto el uso del atributo unsafe-eval
o es imposible permitir inseguro-eval solo para el subconjunto de "self"? La intención es permitir eval-inseguro solo para el mismo prefijo de ruta de origen /:static/math
, ejecución estricta de código CSP JS para 'self
' y ningún código JS para ningún otro método.
Firefox 13.0 también contiene un error o característica que falta que es cabecera CSP no coincide con la variante del W3C. Ver el error aquí: https://bugzilla.mozilla.org/show_bug.cgi?id=746978 –