かなり厳格なコンテンツセキュリティポリシー(CSP)を使用するWebアプリケーションの一部としてMathJaxを使用しようとしています。問題は、MathJaxが[正確には]を使用するようにコーディングされていることです。これは、CSPではデフォルトで安全とは見なされていません。eval()
Function()
現在、次の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';
を使用しているため、MathJax2.0コードが失敗しますFunction()
。Function()
パスの下の同じ原点内にあるMathJaxに対してのみunsafe-eval(つまり)を許可しようとしました/: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/*'
しかし、Firefox13.0でコードを実行することはできません。Firefox Webコンソール([ツール]-[Web開発者]にあります)にエラーメッセージが表示されます。
[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
ただし、「report-uri」へのCSPレポートを取得していません。(ご覧のとおり、私は現在、SSLなしのカスタムローカルホストポートを介してテストを実行しています。違いが生じる場合に備えて。前のコロンstatic
はタイプミスではないため、コロンで始まるすべてのパス部分を内部使用のために予約しています。アプリケーションでは、すべてのユーザーコンテンツが他のURLを自由に定義できます。)
属性の使用がunsafe-eval
正しくないのですか、それとも「自己」のサブセットに対してのみ安全でない評価を許可することは不可能ですか?目的は、同じオリジンパスプレフィックスに対してのみunsafe-evalを許可し/:static/math
、''に対しては厳密なCSPJSコードの実行を許可self
し、他のメソッドに対してはJSコードを許可しないことです。