SRIハッシュ生成
Subresource Integrity Hash
貼り付けたか置いたスクリプトやスタイルシートのSubresource Integrity属性(sha256/384/512)を計算します。
CDNを指す`<script src>`は、そのCDNが利用者のブラウザで好きなコードを走らせてよいという、常時の許可です。Subresource Integrityの属性はそれを取り消します。ブラウザは、あなたが固定したハッシュと一致しないファイルの実行を拒みます。
配信するファイルをそのまま置いてください
実際に配信するスクリプトかスタイルシートです。そのままの内容をハッシュします。
ブラウザの WebCrypto でハッシュします。ブラウザが照合するときと同じダイジェストです。URL の入力欄はわざと置いていません。このページからリモートのファイルを取得してハッシュすると、CORS に阻まれるか SSRF の通り道になり、しかもブラウザはサーバーのようにホストを解決してから固定することができません。実際に配信するファイルを入れてください。
使い方
ファイルかURLを渡します
実際に配布するファイルそのものを置くか、URLを取得させます。ハッシュはバイト列に対して取るので、改行1つ違うファイルとURLからは別の属性が出ます。
属性をまるごとコピーします
出力は`integrity="sha384-…"`です。`crossorigin="anonymous"`と一緒にタグへ貼ってください。これがないと、オリジンをまたぐリソースは不透明になり、完全性を確かめられません。
動くタグではなくバージョンを固定します
`@latest`のURLに対するintegrityの属性は、CDNが新しいものを出した日にサイトを壊します。正確なバージョンを指し、両方を一緒に更新してください。
よくある質問
どのアルゴリズムを使えばよいですか。
sha384がふつうの選択で、たいていのCDNが公表しているのもそれです。sha256も受け付けられますし、sha512はより強いですが、この仕組みの弱いところはそこではありません。間違ったバージョンを固定することのほうです。
追加したらスクリプトが読み込まれなくなりました。
ほぼ必ず3つのうちのどれかです。CDN上でファイルが変わったか、`crossorigin="anonymous"`が抜けているか、配信されているものとは別のビルドからハッシュを取ったかです。最後のものは、たとえば圧縮したファイルと圧縮していないファイルの取り違えです。
最初から敵意のあるスクリプトからも、SRIは守ってくれますか。
いいえ。SRIが保証するのは、固定したとおりのバイト列が届くこと、それだけです。固定したそのバージョンにすでに裏口が仕込まれていたなら、SRIはその裏口を毎回忠実に届けます。
ここから渡せます
ファイルのチェックサム
File Checksum
大きさを問わずファイルを流しながらハッシュし、貼り付けた期待値と突き合わせます。
CSP作成
CSP Builder
案内に沿った入力か違反レポートからContent-Security-Policyを組み立て、各ディレクティブの意味を説明します。
パスワード生成
Password Generator
長さ・使う文字種・紛らわしい文字を除く規則を決めて、必要な本数だけランダムなパスワードを作ります。
パスフレーズ生成
Passphrase Generator
単語リストからダイスウェア方式のパスフレーズを組み、エントロピーをビットで示します。
次の一手
このツールが出したものをそのまま受け取れる道具です。
CSP作成
CSP Builder
案内に沿った入力か違反レポートからContent-Security-Policyを組み立て、各ディレクティブの意味を説明します。
ファイルのチェックサム
File Checksum
大きさを問わずファイルを流しながらハッシュし、貼り付けた期待値と突き合わせます。
セキュリティヘッダー診断
Security Header Scan
サイトのHSTS・CSP・フレーム・リファラ・権限の各ヘッダーを採点し、何を足すべきかを示します。
怪しいURLの確認
Suspicious URL Check
開く前にリンクの形(紛らわしい文字・IPそのままのホスト・@のごまかし・深いサブドメイン・妙なポート・短縮サービス)を調べ、望めばリダイレクトをたどってドメインの登録時期も引きます(評判データベースは使いません)。
Base64エンコード・デコード
Base64 Encoder & Decoder
テキストでもファイルでもBase64とBase64URLを符号化・復号し、UTF-8も正しく扱います。
流出パスワードの照合
Breach Check
そのパスワードがHave I Been Pwnedの流出データにあるかを、SHA-1ハッシュの先頭5文字だけをブラウザから送るk-匿名方式で確かめます。