進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

セキュアではないリモートリソースのやりとりの防止

学習の目的

この単元を完了すると、次のことができるようになります。
  • ブラウザ応答に基づく混在コンテンツの脆弱性を識別する。
  • 静的リソースを使用してリモートリソースをセキュアに取り込む。
  • URL パラメータが漏洩する可能性がある 4 つの場所を挙げる。

信頼と Salesforce プラットフォーム

Salesforce は、信頼を最大の価値としています。サービスとプラットフォームを可能な限りセキュアにするために多くのリソースを投じています。プラットフォームの開発者には、カスタムコードでもこの価値を維持する責任があります。

開発するアプリケーションで Lightning Platform 以外のアプリケーションとのやりとりやそのリソースを必要とすることがあるかもしれません。アプリケーションフローに外部システムを追加する場合は、使用方法が Salesforce の Trust モデルに準拠していることを確認してください。この単元では、Trust モデルに準拠できない 2 つのよくあるケースを回避する方法を学習します。

  • リモートリソースを取り込む
  • データをリモートリソースに送信する

リモートリソースのセキュアな追加

Lightning Platform プラットフォームを使用して外部サイトからリモートリソースを取り込むと、Lightning Platform ドメイン以外でホストされている画像、ドキュメント、スタイルシート、さらには JavaScript ライブラリまで参照することができます。多くの場合、こうした外部サイトではこのプラットフォームと同じ信頼標準が維持されておらず、伝送中の暗号化や HTTPS の使用などの基本的な要件がありません。

混在コンテンツの脆弱性

アプリケーションが HTTPS と HTTP の両方を経由してリソースを追加する場合、「混在コンテンツ」の脆弱性という難問が発生します。コンテンツが暗号化されていないチャネル経由で提供されるため、攻撃者がクライアントとサーバ間の接続を悪用したり、他の暗号化されたページの内部に悪意のあるコンテンツを挿入したりできる可能性があります。

暗号化チャネル経由で取り込まれるリソースの種別に応じて、この脆弱性の影響は大きく変化します。画像のような活動のないコンテンツの場合、リスクは軽微です。アプリケーションで表示が破損したり、誤解を招くコンテンツが表示されたりすることがあります。一方、JavaScript ライブラリのような活動のあるコンテンツの場合、攻撃者はクライアント側のコードを実行してフィッシング、機密データの開示、悪意のあるサイトへのリダイレクトなどを行うことができます。

外部リソースの安全な取り込み

この攻撃に対する最善の策は、Salesforce を使用して外部リソースをホストすることです。Salesforce は「静的リソース」というメカニズムを提供しています。これは、ユーザがコンテンツをアップロードして、Visualforce ページ内で参照できるようにするものです。次のような種類のファイルが対象となります。

  • アーカイブ (.zip および .jar)
  • 画像
  • スタイルシート
  • JavaScript

静的リソースの動作

Kingdom Management 開発者組織で、静的リソースを適切に使用する手順を確認していきましょう。

  1. Kingdom Management 開発者組織にログインし、Insecure Remote Resources アプリケーションを選択します。
  2. [Mixed Content (混在コンテンツ)] タブをクリックします。
  3. ブラウザの URL バーを見ると、URL の横に通常の南京錠記号 (アクセス中のサイトがセキュアであることを示す) とは異なるものが表示されています。

    Firefox では、次のようなアイコンが表示されます。

    Firefox セキュアサイトアイコン

    Chrome では、次のようなアイコンが表示されます。

    Chrome セキュアサイトアイコン

  4. エラーに関する詳細な情報をブラウザから取得するには、このアイコンをクリックします。

    メッセージはブラウザによって異なりますが、一般にこれらのアイコンは、ページの一部が非セキュア接続経由で提供されている (つまり混在コンテンツの脆弱性がある) ことを警告するために設計されています。では、この問題を修正しましょう!

  5. ページ下部にある Visualforce リンクをクリックします。
  6. http 経由で提供されている画像に対応する行を見つけます。
    <apex:image value="http://www.castles.org/images/sd2_small.jpg"/>
    

    暗号化されていない接続を経由するリモートリソースを使用するのではなく、静的リソースを使用してファイルをローカルに参照します。

  7. apex:image 値を次のように変更します。
    <apex:image url=”{!$Resource.castle}”/>
    
  8. [Save (保存)] をクリックて、[Mixed Content (混在コンテンツ)] タブに戻ります。

これでもう混在コンテンツ警告は表示されません。できました!

外部ソースへの安全なデータ送信

外部リソースを安全に取り込む方法はわかりましたが、データを外部ソースに送信する場合はどうすればよいのでしょうか? 開発者による最も一般的な誤りの 1 つは機密情報を URL パラメータで渡すことです。

HTTPS を使用する場合、クライアントと Salesforce 間のすべてのデータは暗号化されます。HTTPS 要求は次の条件が満たされる限りセキュアです。

  • SSL 証明書警告が無視されなかった。
  • Web サーバで SSL 接続の開始に使用される非公開鍵が Web サーバ以外では使用できない。

一般的に、伝送中の機密情報は外部の攻撃者にさらされません。ただし、それでもいくつかの場所でこの情報が漏れる可能性があります。

  • Web サーバおよびプロキシログ — 各要求の URL 全体がサーバログに保存され、その結果、URL の機密データ (パスワードなど) がサーバにクリアテキストで保存されます。
  • ブラウザ — ブラウザは URL パラメータをブックマークされたページの履歴に保存します。そのため、URL に機密データがあれば、ブラウザで公開されます。
  • URL 参照元ヘッダー — セキュアなページでリモートリソース (JavaScript、画像、分析サービスなど) を使用する場合、埋め込まれた各要求の参照元要求ヘッダーで URL が渡されます。クエリ文字列パラメータがサードパーティサイトに配信されたり、保存されたりする場合があります。
  • 印刷された PDF — ほとんどのブラウザでは、印刷されたページの下部にすべての URL パラメータを含むソース URL が記載されます。

そのため、Salesforce では、すべての機密情報は要求の本文で POST (GET ではなく) 要求を使用して配信するように義務付けています。これにより、データは公開されなくなります。

静的リソースを使用して外部リソースを取り込み、POST 要求を使用してデータを外部リソースに送信することで、リモートリソースとセキュアにやりとりできるようになります。

リソース

Visualforce 開発者ガイド - 静的リソース

Flower icon used to indicate that the content is for Salesforce Classic

このモジュールは Salesforce Classic 向けです。ハンズオン組織を起動するときには、Salesforce Classic に切り替えてから、この Challenge を実行してください。

retargeting