web-dev-qa-db-ja.com

CDNを介して配信されるJavaScriptファイルが変更されないようにするにはどうすればよいですか?

いくつかのJavaScriptファイルをCDNでホストするシナリオに取り組んでいます。これらのファイルがユーザー側でダウンロードされたときに、ファイルが改ざんされておらず、実際に指定されたCDNから来ていることを確認できるように、何らかのメカニズムが必要です。

SSLを使用している場合、タスクは非常に簡単であることを理解していますが、それでも、SSLを使用しないHTTPでも適切なファイルが提供されるようにします。

検索できる限り、プラットフォーム間でサポートされているJavaScriptファイルのデジタル署名のような既存のメカニズムはありません。おそらくそれは必要ないのでしょうか?

JavaScriptファイルの作成者を確認するために、ブラウザに組み込まれている方法はありますか?安全な方法でこれを行うためにできることはありますか?

87
baba26

実際のところ、このような機能は、 Subresource Integrity という名前で 現在作成中 です。 <script>タグのintegrity属性を調べます。まだ完全ではありませんが全面的に採用された 、それはまさにこの目的を果たします。

integrity

フェッチされたリソースが予期しない操作なしで配信されたことを確認するためにユーザーエージェントが使用できるインラインメタデータが含まれています。サブリソースの整合性を参照してください。

Source

サブリソース整合性(SRI)は、ブラウザが(たとえば、CDNから)フェッチしたファイルが予期しない操作なしで配信されることを検証できるセキュリティ機能です。取得したファイルが一致する必要がある暗号化ハッシュを提供できるようにすることで機能します。

Source


例:

<script src="https://example.com/example-framework.js"
    integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
    crossorigin="anonymous"></script>

ただし、このは、 Man in the Middle攻撃から保護されません。プレーンHTTP経由のリソース。この場合、ハッシュコードが攻撃者になりすまされ、操作されたスクリプトファイルに対する防御が役に立たなくなります。

このため、上記のセキュリティ対策に加えて、プレーンHTTPの代わりに常に安全なHTTPS接続を使用する必要があります。

139
Timo

サブリソースの整合性 チェックを探しています。

たとえば、次はjQuery CDNスニペットです。

<script src="https://code.jquery.com/jquery-3.1.0.js"
        integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
        crossorigin="anonymous"></script>
35
Brian

免責事項:いつものように、httpsを使用する場合、これらのメカニズムは、MitMを使用してhttp

上記の回答のメカニズムに加えて、親ページでcontent-security policyhttp応答ヘッダーを使用することもできます。

http://www.html5rocks.com/en/tutorials/security/content-security-policy/

コンテンツセキュリティポリシー:script-src 'sha256-qznLcsROx4GACP2dm0UCKCzCG-HiZ1guq6ZZDob_Tng ='

ここで注意すべきことがいくつかあります。 sha *-プレフィックスは、ハッシュの生成に使用されるアルゴリズムを指定します。上記の例では、sha256-が使用されています。 CSPは、sha384-およびsha512-もサポートします。ハッシュを生成するときは、タグを含めないでください。また、先頭または末尾の空白を含む大文字と空白の問題。

Chrome 40以降を使用すると、DevToolsを開いてページをリロードできます。[コンソール]タブには、各インラインスクリプトの正しいsha256ハッシュを含むエラーメッセージが含まれます。

このメカニズムはかなり前から存在しているため、ブラウザのサポートはかなり良好である可能性が高いため、必ず確認してください。

さらに、古い非準拠ブラウザが安全でないことを確認したい場合は、ポリシーで許可されていないページの上部に同期リダイレクトスクリプトを含めることができます。

6

この種の署名ができることとできないことについて、重要なポイントがあります。それcan誰かがあなたのコードを変更するという仮想の攻撃からユーザーを保護します。 It cannotあなたのコードが実行中のコードであることをサイトに保証します。言い換えれば、クライアントからあなたのサイトに来るものはまだ信用できません。

3
ddyer

攻撃者のモデルで攻撃者がCDNから配信されるJavaScriptファイルを変更することを許可している場合、攻撃者のモデルでは、攻撃者が配信元の参照元を変更して検証の試行を削除し、ソースアドレスをCDN、および/またはJavaScriptへの参照を完全に削除します。

また、ユーザーのリゾルバーがHTTPリクエスト(または検証済みの信頼チェーンを持たない他のメカニズム)を介してCDNに正しく解決されているかどうかをアプリケーションが判断する方法のワームの缶を開かないでください。

/ etc/hosts:

#  ...
1.2.3.4    vile-pirates.org    trustworthy.cdn
#  ...
2
Eric Towers