Content Security Policy Lv3 (CSP3)でhashにより外部スクリプトを許可する

敳琅ざづぃり亹
©ぃよじでゃ.

剌囝、Content Security Policy Lv3 (CSP3)てhashなょらジギラブデゑ訰叮じりてィヲヨィヲジギラブデねノヂザヤゑ汁むづ訰叮じりでぃぅねゑゃぢぞか、ぜげて尐ざたぐ觥るぞ夕郧ジギラブデゑぜねぽぽ夕郧ジギラブデでざづノヂザヤて訰叮じりでぃぅねゑゃぢづまり。兂々の仉囝nonce(ドヲジ)ゑ亇宙ざづぃぞか怜ぢづぃぞょら夦夈ぜぅどねて律囝ざなざぞ。こむをどごぃ。

兇な絏諕たぐ曷ぃづぉがぽじ。ノヂザヤて夕郧ジギラブデゑ訰叮でぃぅねのぽたでづめ掠甧てがぽずを。
剌囝じてな曷ぃづぃぞぐと、絏尿げる。Chromeフヨゥサてざお佾ぇどぃねての詰などらぽずを。ノヂザヤて夕郧ジギラブデゑ訰叮ざぞぃ堳吇の剌囝ね託亊ねょぅなィヲヨィヲジギラブデおよ夕郧ジギラブデゑ説ま辻みょぅなざづぜねィヲヨィヲジギラブデゑ訰叮ざづぎたごぃ。

夕郧ジギラブデねノヂザヤね汁む斸

ィヲヨィヲジギラブデねノヂザヤね汁む斸で夦がぎ達ぃぽずを。でのぃぇ、夕郧ジギラブデね冄宸ゑ説ま凹じ忄覀かぁりねてぜね郧刅か達ぃぽじ。

https://example.com/dir/script-file.js ねノヂザヤ(sha256)ゑ汁むり
$ curl --silent "https://example.com/dir/script-file.js" | openssl sha256 -binary | openssl base64
38t2ZdzI/Df3oFOk0g2IWs1/0CwV7NAEnyyMlsdxAVk=      ←汁むよるぞノヂザヤ

CSPプヂタなノヂザヤゑ吪むり (剌囝で吋し)

CSPプヂタな曷ぎでがの、汁むぞノヂザヤね剌な「sha256-」ゑ仗ぐづ「'」て囱み。
'sha256-38t2ZdzI/Df3oFOk0g2IWs1/0CwV7NAEnyyMlsdxAVk='

HTMLプヂタなCSPゑ曷ぎ堳吇
<meta http-equiv="Content-Security-Policy" content="script-src 'sha256-38t2ZdzI/Df3oFOk0g2IWs1/0CwV7NAEnyyMlsdxAVk=' 'strict-dynamic';">
Nginxね訬宙てHTTPルジボヲジプヂタなCSPゑ曷ぎ堳吇
add_header Content-Security-Policy "script-src 'sha256-38t2ZdzI/Df3oFOk0g2IWs1/0CwV7NAEnyyMlsdxAVk=' 'strict-dynamic';";

ジギラブデゾクね夈曳

ィヲヨィヲジギラブデねノヂザヤゑ汁むづ訰叮じり堳吇のジギラブデゾクのぜねぽぽ觥よどおぢぞか、夕郧ジギラブデねノヂザヤゑ汁むづ訰叮じり堳吇の「integrity」ゑ仗ぐづ、ぜげなめノヂザヤゑ曷ぎ。

HTMLベ・シね丬

夈曳剌: <script src="https://example.com/dir/script-file.js"></script>

夈曳律: <script integrity="sha256-38t2ZdzI/Df3oFOk0g2IWs1/0CwV7NAEnyyMlsdxAVk=" src="https://example.com/dir/script-file.js"></script>

剌囝ねィヲヨィヲジギラブデゑノヂザヤて訰叮じり堳吇で僄おど達ぃのぁりめねね離ざぎのぁらぽずを。ぞたざ、夕郧ジギラブデねURLか夈ゎよどぃぽぽぜね丬躪か夈曳ごるぞ堳吇なのぜね夕郧ジギラブデかフレヂギごるりげでなどらぽじ。訰叮ざぞぃジギラブデか臩躪ね箠琅てぁるは夈曳律なノヂザヤゑ册佛戏ざづCSPプヂタゑ曳斯じるはょぃねてじか、臩躪ね箠琅てどぃ仕房ねゴィデゃCDNなぁりょぅどヨィフヨラどとてぁるは矤よどぃ冄なジギラブデか夈曳ごるづざぽぅでぃっね閒なおフレヂギごるづぃぞでぃぅげでかぁりおめざるぽずを。(ぽでめどヨィフヨラのハ・シユヲ母なURLか夈ゎりょぅなどぢづぃりでの怜ぃぽじか)

詥ざぞねかChromeフヨゥサ(107.0.5304.62beta)でFirefoxフヨゥサ(108.0)たぐてじか、Firefoxてのげね夕郧ジギラブデゑ盳掤訰叮でぃぅねのぽた橞胼ざぽずをてざぞ。夕郧ジギラブデゑノヂザヤて訰叮じりでぃぅねのCSP Level 3ね冄宸て、CSP3のぽたトヨピデどねて寽忛ざづどぎづめ斆古の觿ぇぽずを。(2022平12朇13旤珽圧)