Visualforce ページに対する GET 要求の CSRF 保護を許可 (重要な更新)

この重要な更新により、Visualforce ページで GET 要求の CSRF チェックを有効にできるようになりますが、既存の Visualforce ページへのリンクが切断される可能性があります。

[設定] で Visualforce ページを作成するときに、[GET 要求の CSRF 保護が必要] を選択できます。このオプションを使用することで、クロスサイトリクエストフォージェリ (CSRF) を防ぐ Visualforce ページのセキュリティが強化されます。

一般に、Visualforce ページからの POST 要求でデータが送信され、GET 要求でデータが求められます。POST 要求には常に CSRF 保護が含まれます。この重要な更新により、Visualforce ページが GET 要求で確実に CSRF トークンを受け取るオプションを使用できるようになります。

Visualforce ページでこのオプションが有効な場合、その URL (/apex/PageName) を入力してページにアクセスすることはできません。また、<a> タグを使用したそのページへのプレーンリンクも機能しません。CSRF 保護が有効な Visualforce ページにアクセスしようとすると、ページは読み込まれず、エラーが表示されます。

CSRF チェックがあるページからのプレーンリンクは機能しますが、そのページへのリンクは機能しません。たとえば、ページの名前が PageName の場合、リンク <a href="/apex/PageName">Link</a> は機能しません。代わりに、URLFOR() 数式関数、$Page グローバル変数、または apex:outputLink コンポーネントを使用します。

<apex:outputLink value="/apex/PageName">Link using apex:outputlink</apex:outputlink>
<a href="{!$Page.PageName}">Link using $Page</a>
<a href="{!URLFOR($Page.PageName)}">Link using URLFOR()</a>
GET 要求の CSRF チェックは、Visualforce ページが Apex コントローラから参照される方法にも影響します。ナビゲーションの目的で CSRF で保護されたページの URL に戻るメソッドは機能しません。
public String getPage(){
  return '/apex/PageName'; 
}
代わりに、URL ではなく Visualforce ページへの参照を返すメソッドを使用します。
public class customController {
    public PageReference getPage() {
    return new PageReference('/apex/PageName'); 
  }

  public PageReference getPage1() {
    return Page.PageName; 
  }
}

このいずれかのメソッドを使用してページにリンクすると、Visualforce が必要な CSRF トークンを URL に追加します。ページで CSRF 保護が有効になっているかどうかに関わらず、Visualforce ページへのリンクにはこれらのメソッドが優先されます。Visualforce ページの URL に CSRF トークンを追加する場合は、これらのメソッドのみを使用できます。

重要な更新のテスト

この更新は、2017 年 6 月 11 日の自動有効化日付にあらゆる場所で有効になります。最初に Developer Edition 組織で Visualforce コードをテストしてから、CSRF 保護を使用するすべての Visualforce ページへのリンクが機能することを確認することをお勧めします。本番組織で作業する必要がある場合は、ピーク時を避けて行います。

  1. [設定] から、[クイック検索] ボックスに「重要な更新」と入力して、[重要な更新] を選択します。
  2. [Visualforce ページに対する GET 要求の CSRF 保護を許可] の [有効化] をクリックします。
  3. GET 要求の CSRF 保護が有効になっている Visualforce ページへのリンクをテストします。