3.5.2 リファラーフィルタリングの管理

LiveCycle には、サーバーリソースにアクセスできるリファラーを指定するリファラーフィルターが用意されています。デフォルトでは、リファラーフィルターでは安全な HTTP メソッド(GET など)を使用する要求はフィルタリングされません。ただし、CSRF_CHECK_GETS が true に設定されている場合は除きます。許可されているリファラーのエントリのポート番号が 0 に設定されている場合、ポート番号に関係なくホストからのすべての要求がリファラーと共に許可されます。ポート番号が指定されていない場合は、デフォルトのポート 80(HTTP)またはポート 443(HTTPS)からの要求のみが許可されます。許可されているリファラーリストのすべてのエントリが削除されると、リファラーフィルタリングは無効になります。

Document Services を最初にインストールすると、許可されているリファラーリストは、Document Services がインストールされたサーバーのアドレスで更新されます。サーバーのエントリには、サーバー名、IPv4 アドレス、IPv6 アドレス(IPv6 が有効の場合)、ループバックアドレス、localhost エントリなどがあります。「許可されるリファラ」のリストに追加された名前は、ホストオペレーティングシステムにより返されます。例えば、IP アドレスが 10.40.54.187 のサーバーは次の入力を含みます。http://server-name:0, https://10.40.54.187:0, http://127.0.0.1:0, http://localhost:0 ホストのオペレーティングシステムによって返された正規でない名前(IPv4 アドレス、IPv6 アドレス、正規のドメイン名を持たない名前)の場合、ホワイトリストは更新されません。許可されているリファラーリストを、ビジネス環境に合わせて変更します。実稼働環境に LiveCycle サーバーをデプロイするとき、許可されているリファラーリストの内容がデフォルトのままになっていないことを確認してください。許可されているリファラー、リファラーの例外または URI を変更したら、必ずサーバーを再起動して、その変更を有効にします。

許可されているリファラーリストの管理

許可されているリファラーリストは、管理コンソールの User Management インターフェイスから管理できます。User Management インターフェイスを使用すると、リストを作成、編集または削除できます。許可されているリファラーリストの操作について詳しくは、管理ヘルプの「CSRF 攻撃の防止」を参照してください。

許可されているリファラーの例外リストおよび許可されている URI リストの管理

LiveCycle には、許可されているリファラーの例外リストおよび許可されている URI リストを管理するための API が用意されています。この API を使用すると、リストを取得、作成、編集または削除できます。使用可能な API のリストを次に示します。

  • createAllowedURIsList

  • getAllowedURIsList

  • updateAllowedURIsList

  • deleteAllowedURIsList

  • addAllowedRefererExceptions

  • getAllowedRefererExceptions

  • updateAllowedRefererExceptions

  • deleteAllowedRefererExceptions

API について詳しくは、『LiveCycle API リファレンス』を参照してください。

許可されているリファラーの例外の LC_GLOBAL_ALLOWED_REFERER_EXCEPTION リストは、グローバルレベルで使用します。つまり、すべてのアプリケーションに適用できる例外を定義します。このリストには、絶対パス(例:/index.html)または相対パス(例:/sample/)のいずれかの URI のみが含まれています。また、相対 URI の末尾に正規表現を追加することもできます(例:/sample/(.)*)。

LC_GLOBAL_ALLOWED_REFERER_EXCEPTION リスト ID は、com.adobe.idp.um.api 名前空間の UMConstants クラスで定数として定義されており、adobe-usermanager-client.jar にあります。この LiveCycle API を使用すると、リストを取得、作成、編集または削除できます。例えば、グローバルで許可されているリファラーの例外リストを作成するには、次の API を使用します。

addAllowedRefererExceptions(UMConstants.LC_GLOBAL_ALLOWED_REFERER_EXCEPTION, Arrays.asList("/index.html", "/sample/(.)*")) 

アプリケーション固有の例外については、CSRF_ALLOWED_REFERER_EXCEPTIONS リストを使用します。

リファラーフィルターの無効化

リファラーフィルターによって LiveCycle サーバーへのアクセスが完全にブロックされ、許可されているリファラーリストを編集できない場合は、サーバー起動スクリプトを更新して、リファラーフィルタリングを無効にできます。

それには、-Dlc.um.csrffilter.disabled=true JAVA 引数を起動スクリプトに追加して、サーバーを再起動します。許可されているリファラーリストを適切に再設定したら、JAVA 引数は必ず削除するようにしてください。

カスタム WAR ファイルのリファラーフィルタリング

管理者は、ビジネス要件に合わせて LiveCycle を操作するためのカスタム WAR ファイルを用意している場合があります。カスタム WAR ファイルに対してリファラーフィルタリングを有効にするには、adobe-usermanager-client.jar を WAR のクラスパスに追加し、フィルターエントリを web.xml ファイルに追加して、次のパラメーターを指定します。

CSRF_CHECK_GETS は、GET 要求でリファラーチェックを制御します。このパラメーターが定義されていない場合、デフォルト値は false に設定されます。このパラメーターは、GET 要求をフィルタリングする場合にのみ指定します。

CSRF_ALLOWED_REFERER_EXCEPTIONS は、許可されているリファラーの例外リストの ID です。このリファラーフィルターを使用すると、リスト ID で特定されたリスト内のリファラーからの要求では、LiveCycle サーバーのリソースを呼び出すことはできません。

CSRF_ALLOWED_URIS_LIST_NAME は、許可されている URI リストの ID です。リファラーフィルターは、要求のリファラーヘッダーの値に関係なく、リスト ID で特定されたリストのリソースに対する要求をブロックしません。

CSRF_ALLOW_NULL_REFERER は、リファラーが null の場合または存在しない場合のリファラーフィルターの動作を制御します。このパラメーターが定義されていない場合、デフォルト値は false に設定されます。このパラメーターは、ヌルリファラーを許可する場合にのみ指定します。ヌルリファラーを許可すると、ある種のクロスサイト要求偽造攻撃を許可してしまう可能性があります。

CSRF_NULL_REFERER_EXCEPTIONS は、リファラーが null の場合にリファラーチェックが行われない URI のリストです。このパラメーターは、CSRF_ALLOW_NULL_REFERER が false に設定されている場合にのみ有効です。リスト内で複数の URI を指定するときはコンマで区切ります。

サンプル WAR ファイルに対する web.xml ファイルのフィルターエントリの例を次に示します。

<filter> 
       <filter-name> filter-name </filter-name> 
       <filter-class> com.adobe.idp.um.auth.filter.RemoteCSRFFilter </filter-class> 
     <!-- default is false --> 
     <init-param> 
      <param-name> CSRF_ALLOW_NULL_REFERER </param-name> 
      <param-value> false </param-value> 
     </init-param> 
     <!-- default is false --> 
     <init-param> 
      <param-name> CSRF_CHECK_GETS </param-name> 
      <param-value> true </param-value> 
     </init-param> 
     <!-- Optional --> 
     <init-param> 
       <param-name> CSRF_NULL_REFERER_EXCEPTIONS </param-name> 
       <param-value> /SAMPLE/login, /SAMPLE/logout  </param-value> 
     </init-param> 
     <!-- Optional --> 
     <init-param> 
      <param-name> CSRF_ALLOWED_REFERER_EXCEPTIONS </param-name> 
      <param-value> SAMPLE_ALLOWED_REF_EXP_ID </param-value> 
     </init-param> 
     <!-- Optional --> 
     <init-param> 
      <param-name> CSRF_ALLOWED_URIS_LIST_NAME </param-name> 
      <param-value> SAMPLE_ALLOWED_URI_LIST_ID     </param-value> 
     </init-param> 
</filter> 
    ........ 
    <filter-mapping> 
      <filter-name> filter-name </filter-name> 
      <url-pattern>/*</url-pattern> 
    </filter-mapping>

トラブルシューティング

適切なサーバー要求が CSRF フィルターによってブロックされる場合は、次のいずれかを試してみてください。

  • 拒否された要求にリファラーヘッダーがある場合は、許可されているリファラーリストにそのリファラーを追加することを慎重に検討します。信頼できるリファラーのみを追加します。

  • 拒否された要求にリファラーヘッダーがない場合は、リファラーヘッダーを含めるようにクライアントアプリケーションを変更します。

  • クライアントがブラウザーで動作できる場合は、そのデプロイメントモデルを試してみます。

  • 最後の手段として、許可されている URI リストにリソースを追加できます。ただし、これは推奨設定ではありません。