クロスサイトリクエストフォージェリ (CSRF)
つまり、攻撃者のページには、あなたの Web サイトでアクションを実行する URL が含まれています。ユーザーが攻撃者の Web ページにアクセスしたときに、まだあなたの Web ページにログインしている場合、URL が取得され、アクションが実行されます。ユーザーはあなたの Web ページで認証されているため、この攻撃は成功します。この攻撃は単純な例で、攻撃者の手口はより巧妙になっており、コールバック要求を生成するスクリプトを使用したり、あなたの AJAX メソッドに対して CSRF 攻撃を行うこともあります。
詳細および従来の防御方法については、次を参照してください。
- http://www.owasp.org/index.php/Cross-Site_Request_Forgery
- http://www.cgisecurity.com/csrf-faq.html
- http://shiflett.org/articles/cross-site-request-forgeries
Lightning Platform 内では、このような攻撃を回避する対 CSRF トークンが実装されています。すべてのページにランダムな文字列が非表示形式項目として指定されています。次のページが読み込まれると、アプリケーションはこの文字列の正当性を確認し、値が予測値と一致しない限り、コマンドを実行しません。この機能によって、すべての標準コントローラーおよびメソッドの使用時に攻撃から保護されます。
開発者は独自の action メソッドを作成して、意識せずに CSRF 対策コントロールをスキップしています。id パラメーターはコードで読み込まれ、使用されます。CSRF 対策トークンが読み込まれたり、検証されたりすることはありません。攻撃元の Web ページでは、CSRF 攻撃を使用して、id パラメーターに任意の値を指定することで、ユーザーをこのページに移動することができます。
このような状況に対する組み込みの防御策がないため、開発者は前例の id 変数のように、ユーザー指定のパラメーターに基づいてアクションを実行するページの書き込みに注意する必要があります。回避策の 1 つは、中間の確認ページを挿入して、ユーザーが本当にそのページをコールしようとしているのかどうかを確認することです。その他の対策として、アイドルセッションのタイムアウトを短くすることや、あるサイトで認証されたまま、そのブラウザーを使用して別のサイトに移動しないように、アクティブなセッションからログアウトすることをユーザーに推奨することなどが考えられます。
複数の Salesforce ログインページが開かれている場合、CSRF に対する Salesforce の組み込み防御策によってエラーが表示される場合があります。ユーザーが 1 つのタブで Salesforce にログインし、その後、別のタブでログインを試みると、「送信したページは、セッションに対して無効でした。」というエラーが表示されます。正常にログインするには、ログインページを更新するか、ログインをもう一度試みます。