この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

クロスサイトリクエストフォージェリ

クロスサイトリクエストフォージェリ (CSRF) は、認証済みの Web アプリケーションセッション中に、不要なアクションをエンドユーザーに強制的に実行させる攻撃です。CSRF を防ぐには、confirmationTokenRequired を使用するか、またはユーザーアクションによって状態変更をトリガーします。

Salesforce Platform に対して行われたフォーム要求はすべて保護されます。ボタンのクリックなどユーザーアクションによってトリガーされた挿入、削除、更新、更新/挿入の状態変更操作も保護されます。

ただし、ページのインスタンス化時にトリガーされた状態変更またはデータ操作言語 (DML) 操作は、残りのページを読み込む前に実行され、プラットフォームのデフォルト CSRF 保護はスキップされます。クラスコンストラクターでの状態変更および DML 操作は、次からトリガーされる場合は脆弱です。
  • Visualforce ページ
  • Lightning Web コンポーネント (LWC)
  • Aura
  • Visualforce ページのアクションパラメーターからコールされた任意のメソッド

Apex の例

次の Visualforce ページは、ページの初期化時に !init アクションがトリガーされるため、CSRF に対して脆弱です。
1<apex:page controller="maincontroller" action="{!init}">
2
3public pageReference init(){
4
5   UserSetting__c accountToUpdate;
6   pageReference p = page.mainview;
7   // Retrieve the password and redirect query string parameters from the current page URL
8   String password = ApexPages.currentPage().getParameters().get('password');
9   String redirect =   ApexPages.currentPage().getParameters().get('redirect');
10   if(string.isBlank(redirect)){
11       p.getParameters().put('redirect', '/home/home.jsp');
12       p.setRedirect(true);
13   } else {
14       p.getParameters().put('redirect', redirect);
15   }
16   if(string.isBlank(password)){
17       p.getParameters().put('password', 'blank');
18       p.setRedirect(true);
19   } else {
20       p.getParameters().put('password', password);
21       accountToUpdate = [SELECT password__c FROM UserSetting__c LIMIT 1];
22       accountToUpdate.password__C = password;
23       update accountToUpdate;
24   }
25   if(p.getRedirect()== true){
26      return p; 
27   }
28   else {
29       return null;
30   }
31}

ハッカーは、データベースステートメントを変更するパラメーターが含ま���た URL を作成できるため、自分で選んだ悪意のあるアクションを実行できます。アプリケーションにログインしている間にユーザーがそのような URL を開くと、ハッカーが選んだ URL パラメーターを使用してコードが実行されます。被害者のブラウザーのコンテキストから、意図しないデータベースアクションが実行されます。

Visualforce ページの保護

ページ初期化で状態が変更されるか、または DML 操作が実行されるときに、Visualforce ページの CSRF に対する脆弱性を保護するには、Visualforce ページで confirmationTokenRequired Boolean メタデータ項目を有効にします。

confirmationTokenRequired が true に設定されている場合は、ページに対する GET 要求で、URL 内に CSRF トークンが必要です。このトークンを省略すると、ページにアクセスできません。

デフォルト設定は false で、Apex の組み込み CSRF トークン保護は設定されていません。この項目を設定するには、組織の設定にある関連する Visualforce ページ設定に移動します。

confirmationTokenRequired についての詳細は、『メタデータ API 開発者ガイド』の「ApexPage」を参照してください。

Lightning および LWC CSRF の保護

Lightning または LWC のインスタンス化の際、Apex コントローラーで状態変更や DML 操作を実行しないでください。その代わりに、ボタンのクリックなどのユーザーアクションによって状態変更をトリガーしてください。CSRF、およびコードで CSRF を防ぐ方法についての詳細は、Trailhead の「Secure Server-Side Development module (セキュアなサーバーサイド開発モジュール)」を確認してください。