Mark Hammer's Blog

SalesforceやTrailheadに関する情報を投稿しているブログです。

Trailhead モジュール:インジェクションの脆弱性防止

※この内容は2019/4時点のものです。

アプリケーションセキュリティの使用開始

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_get_started_wappsec

  • 説明:日本語
  • Challenge:日本語選択問題

クロスサイトスクリプト (XSS) について

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_cross_site_scripting

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

このChallengeを完了するには、入力フィールドに有効なクロスサイトスクリプティング攻撃を実施する必要があります。

  • 「Cross-site Scripting (XSS)」アプリケーションの「XSS Basics Challenge」タブにアクセスしてください。
  • 入力フィールドを使用して、次の要件を満たすクロスサイトスクリプティングペイロードを入力してください。
    • <a> any text</a>」のように、HTMLテキストを含むもの
    • htmlタグ「<a>」の onmouseover プロパティを使用してJavaScriptアラートのポップアップを開始させるもの
  • 「Attempt XSS!」をクリックし、表示されたテキストにマウスカーソルを当て、ペイロードが成功していることを確認してください。

※筆者注:筆者が本ChallengeをChromeにて実施した際は、条件を満たすHTMLテキストを入力フィールドに入力し、「Attempt XSS!」をクリックしてもテキストは表示されませんでしたが、Challengeはクリアとなりました。

Lightning Platform に組み込まれている XSS 保護の確認

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_built_in_xss_protections

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 「Cross-site Scripting (XSS)」アプリケーションの「Built-In XSS Protections Challenge」タブにアクセスし、「Visualforce Page」リンクをクリックしてください。
  • 「Built_In_XSS_Protections_Challenge」Visualforceページの、差し込み項目の右にあるコメントについて、以下の通り変更してください。
    • 脆弱性がある場合は「<!-- Line 10 is vulnerable to XSS: YES -- >」のようにしてください。
    • 脆弱性がない場合は「<!-- Line 10 is vulnerable to XSS: NO -- >」のようにしてください。

Lightning Platform アプリケーションでの XSS の防止

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_preventing_xss_inforce

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 「Cross-site Scripting (XSS)」アプリケーションの「XSS Mitigations Challenge」タブにアクセスし、「Visualforce Page」リンクをクリックしてください。
  • 「XSS_Mitigations_Challenge」Visualforceページにある"{!sampleMergeField}"を探し、各フィールドに対し必要に応じてHTMLENCODE(), JSENCODE(), JSINHTMLENCODE()メソッドを使用してください。エンコーディングが不要なフィールドは変更しないでください。

SOQL インジェクションについて

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_soql_injection

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 「SOQL Injection」アプリケーションの「SOQL Injection Challenge」タブにアクセスしてください。supply__cオブジェクトの検索ツールが表示されます。
  • 検索ボックスを使用して、貴族専用(Nobles only)の消耗品を返すSOQLインジェクションを実行してください。

ヒント:SOQLインジェクションに成功した場合、クエリは Venison を含む1レコードを結果として返すはずです。

コード内の SOQL インジェクションの防止

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_prevent_soql_injection

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 「SOQL Injection」アプリケーションの「Prevent SOQL Injection Challenge」タブにアクセスしてください。複数の「Perform Search」ボタン付きの検索ボックスが表示されます。
  • 「Prevent_SOQL_Injection_Challenge」Apexコントローラには、動的クエリを含む3つのクエリ「stringSearchOne()」、「stringSearchTwo()」、「numberSearchOne()」があります。
  • 単一引用符のエスケープメソッドを使用して、「stringSearchOne()」、「stringSearchTwo()」の各クエリについてSOQLインジェクションを防止するよう修正してください。
  • 型キャストメソッドを使用して、「numberSearchOne()」各クエリについてSOQLインジェクションを防止するよう修正してください。