アクティブなコンテンツセキュリティポリシーを使用してアプリケーションに内部Rails:バックリンク機能を許可します。アクティブコンテンツセキュリティポリシー(CSP)とRails:バックリンク
CSP:
%meta{"http-equiv" => "Content-Security-Policy", "content" => "default-src *;"}
例リンク:
= link_to 'Back', :back
# <a href="javascript:history.back()">Back</a> *
*はリファラへのリンクをレールと全くリファラが設定されていない場合にのみ、バックJSに落ちます。
どうすればこの極小のホワイトリストを作ることができますか?history.back()
javascript?
私はhttps://www.w3.org/TR/2015/CR-CSP2-20150721/#script-src-hash-usageで説明したように、例外を設定しようと、このような必要なハッシュを生成:
echo -n "history.back()" | openssl dgst -sha256 -binary | openssl enc -base64
結果:
%meta{"http-equiv" => "Content-Security-Policy", "content" => "default-src *; script-src 'self' 'sha256-LdlORHyUW/rwezK0l13nW+IwcZmi78eWOCBjewMWRr4='"}
しかし、クロームコンソールはハッシュを意味するものと同じエラーが表示されます無効です:
フォールに違反しているため、JavaScript URLの実行を拒否しました コンテンツセキュリティポリシーの指令: "script-src 'self' 'sha256-SmahML3R6 + R4SRnsB6tEJ8Z4OVa4Qhk7A/gv3eAiG6s ='"インライン実行を有効にするには、 'unsafe-inline'キーワード、ハッシュ( 'sha256 -...')、またはnonce ( 'nonce -...')のいずれかが必要です。
残念ながら、これは私の問題ではありません。なぜなら、バックリンクのHTMLコードとjavascriptはRailsで生成されたもので、私ではないからです。 – ToniTornado
確かに。私が示唆しているのは、link_to 'Back'を使わないことです:back、しかしlink_to 'Back'、 '#'、data:{behavior: 'back-link'}のようなものです。 JS:$( '[data-behavior〜= back-link]')。on( 'click'、function(){history.back}); – hawe