問題タブ [subresource-integrity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
subresource-integrity - サブリソースの整合性とパフォーマンス
Subresource Integrityについて読んでいますが、パフォーマンスの低下が心配です。これ (実行する前にすべてのファイルをハッシュする必要がある) は、特に低レベルの CPU を搭載したデバイスで、ページの読み込みをどのように遅くしますか?
requirejs - RequireJS とサブリソースの整合性 (SRI)
RequireJS の構成ファイルの「パス」領域にある JS URL のサブリソース整合性 (SRI) 属性を設定する方法を知っている人はいますか?
RequireJS は Web サイトで SRI をサポートしていると述べていますが、実装方法に関する情報は見つかりません。
html - Web ページの要件を暗号で検証する方法は?
HTML で Web ページの要件を暗号で検証する方法は?
たとえば、画像、スタイル シート、または (最も重要な) スクリプトなどの外部リソースが (信頼されていない可能性がある) コンテンツ配信ネットワーク上にある場合、クライアント ブラウザーに、ダウンロードしたリソースのハッシュを暗号的に検証させることは可能ですか?使用前?これには HTML 属性または URL スキームがありますか、それとも手動で JavaScript を作成する必要がありますか?
理論的根拠は、HTTPS 経由で提供される HTML でハッシュを提供することで、侵害された (または欠陥のある) CDN-s に対する追加の防御を提供することです。
SO に関する関連する質問:
javascript - ブラウザごとに SRI の結果が異なる理由として考えられるのは?
クライアントは、Web サイトのすべての CSS および JS アセットで SRI を使用したいと考えていますが、Firefox で非常に奇妙な問題に遭遇しました。彼らのサーバーは、HTML コンテンツを提供する apache2 インスタンスです。*
CORS は、任意の ( ) オリジンに対して、仮想ホスト全体で有効になっています。キャッシュや CDN が配置されていません。
問題の2つのファイルは
company.min.css
とcompany.min.js
SRI ハッシュを生成するために、最初はSRI Hash Generatorが使用されました。これからの出力には複数のアルゴリズムがあり、次のようになります。
CSS ファイルについても同様です。これらは HTML に挿入され、サイトはいくつかの異なるブラウザーでテストされ、次の結果が得られました。
- Chrome (/Canary)、Opera、Edge、さらには IE でも動作します
- Firefox (/Nightly) では動作しません。
Firefox は、SHA512 がリソースと一致しないと言って、CSS だけを嫌います。何らかの理由でJSファイルを正常に処理します。
上記のツールによって生成されたハッシュが実際に正しいことを (OpenSSL を使用して) 確認し、Firefox を除くほぼすべてのブラウザーで機能するという事実から考えさせられました。
そこで、Mozilla 独自の SRI ツールsrihash.orgを使用してリソースをハッシュしようとしました。これは、Mozilla が SRI に関するブログ投稿から推奨しているツールです。
今は少し奇妙です。
- CSS ファイルの場合、srihash.org はまったく異なるハッシュを生成します。
- JS ファイルの場合、ハッシュは両方のジェネレーターで同じであり、私のオフライン ハッシュと OpenSSL を一致させます。
しかし、CSS リンクを Mozilla が生成したリンクに置き換えると、次のようになります。
- Firefoxで動作します
- ハッシュが一致しないため、他の場所では機能しません
質問
これは、Firefox の SRI 実装に何らかの問題があると思われます。実装に関連する議論はこちらにありますが、Firefox でリソースが異なる理由は示されていません。しかし、私は厳密には Web 開発者ではないので、ブラウザーごとに SRI ハッシュが異なる (文書化された) 理由はありますか?
正確なサーバー/リソースを開示することはできません。これは一般的な質問です。客観的な経験や、SRI 実装の違いを文書化した認定ソースへの参照がある場合は、回答してください。
javascript - srihash.org が cesiumjs.org の .js ファイルに対して機能しない
URL https://cesiumjs.org/releases/1.21/Build/Cesium/Cesium.jsに対してsrihash.orgを使用して次のコードを生成しました。
整合性チェック済みのスクリプトを含むページを読み込もうとすると、Windows の Chrome 50 で次のエラーが発生します。
計算された SHA-256 整合性「vGCl/67DuYY5UzwNQGGpYh2gztA4PhvD+I4pcX7TWcU=」を持つリソース「 https://cesiumjs.org/releases/1.21/Build/Cesium/Cesium.js 」の「整合性」属性で有効なダイジェストを見つけることができませんでした。リソースがブロックされました。
また、次を使用して、手動でハッシュを生成しようとしました (Windows では、openssl-1.0.2h)。
その結果:
このハッシュは、Cesium.js を Chrome でロードするときに機能します。ただし、これにより、2 つのハッシュのうちどちらが正しいかという疑問が生じます...MITM 攻撃の可能性は低いとはいえ、行末またはエンコーディングに関係があると思います。Cesium.js
Windows の改行があるようで、Chrome での読み込みの HTTP レスポンスを以下に添付します。
2 つのハッシュの違いはどのように説明でき、どちらが正しいのでしょうか?
Cesium.js の HTTP 応答ヘッダー:
c# - SRI ハッシュが期待どおりではない
ビルド プロセスでサブリソースの整合性を実装しようとしているので、JavaScript ファイルへのハッシュ キーを自分で生成しています。私たちのファイルのほとんどで、私が生成しているハッシュは、ブラウザーが期待するものと srihash.org が出力するものと一致します。ただし、jquery と jquery-ui の場合、ブラウザーが期待するものとは異なるハッシュを生成しており、srihash.org が出力しています。ここに私のハッシュコードがあります:
「テキスト」はファイルの内容です。ある種のエンコーディングの問題だと思いましたが、エンコーディングのすべてのオプションを試しましたが、どれも一致しませんでした。ファイル システムからファイルを読み取り、WebClient.DownloadString を使用してサーバーからファイルを取得しようとしましたが、毎回同じ (正しくない) ハッシュが取得されます。
wordpress - Wordpress でのサブリソースの整合性保護
https://observatory.mozilla.org/で自分の Web サイトをスキャンしているときに、サブリソースの整合性エラーが発生しました。
wp-sri プラグインを使用しようとしましたが、他のプラグインと競合しています。それを修正する他の方法はありますか?
エラー テスト スコアのスクリーンショット:
javascript - サブリソース整合性チェック内でのロード エラーの処理
サブリソースの整合性チェックを実装しています。1) ブラウザが CDN からロードし、整合性チェックを実行して続行する、または 2) 整合性チェックに失敗した場合に、埋め込みスクリプトが起動し、アプリケーションから必要なスクリプトを取得するようなフォールバックを実装したいと考えています。サーバー (私の管理下にあるリソース)。
window.onerror イベントをキャッチする単純な JavaScript がありますが、スクリプトは実際にはキャッチされていない ReferenceError (私のページは外部リソース内のスクリプトを参照しています) を検出しており、「有効なダイジェストが見つかりませんでした...」というブラウザー エラーは検出していません。
整合性チェックが失敗したことを検出し、javascript を使用してサードパーティのホストされたリソースをより信頼できる場所から取得する方法を見つけた人はいますか?