Web UI フレームワークのセキュリティー - CSRF 攻撃に対する保護
CSRF 攻撃から保護するには、Web UI フレームワークで以下の手順を使用します。
手順
- web.xml ファイルを開きます。
- CSRF 攻撃から保護するために使用されるトークンを検証するには、アプリケーションで登録される要求バリデーターを作成します (web.xml ファイルにまだバリデーターが存在しない場合)。
例:
<context-param> <param-name>scui-request-validator-10</param-name> <param-value> com.sterlingcommerce.ui.web.platform.security.SCUICSRFTokenValidator </param-value> </context-param>
- バリデーターが稼働できるモードを、以下のようにセットアップします。
- ALL - POST 要求と GET 要求の両方で、CSRF トークンが検証されます。
- POST (デフォルト) - POST 要求のみで CSRF トークンが検証されます。
- NONE - バリデーターは、どの要求でも CSRF トークンを検証しません。
config.xml ファイルまたは web.xml ファイルのコンテキスト・パラメーターで、バリデーター・モードを指定できます (web.xml ファイルにまだバリデーター・モードが存在しない場合)。
モードが指定されていない場合、または検証モード用のコンテキスト・パラメーターが指定されていない場合、モードはデフォルトで POST になります。 IBM® では、要求の検証に POST モードを使用することをお勧めします。
例:
<context-param> <param-name>scui-csrf-validator-request-method</param-name> <param-value>ALL</param-value> </context-param>
- 必要な場合、以下のガイドラインを使用して、バリデーター用の URI (Universal Resource Indicator) 包含リストおよび除外リストをセットアップします。
- URI が除外リストにある場合、CSRF トークンの検証は行われません。
- URI が包含リストにあり、除外リストにはない場合、CSRF トークンの検証が行われます。
web.xml ファイル内の以下のコンテキスト・パラメーターを使用して、包含および除外のリストを作成します。 パラメーターはいくつでも指定できます。- csrf-include-uri
この値と同じ URI を持つ要求は、CSRF トークンの検証が行われます。
例 (web.xml の場合):
<context-param> <param-name>csrf.include.uri.endswith.stk.1</param-name> <param-value>.do</param-value> </context-param>
- csrf-include-uri-endswith
この値で終了する URI を持つ要求は、CSRF トークンの検証が行われます。
例 (web.xml の場合):
<context-param> <param-name>csrf.include.uri.endswith.stk.2</param-name> <param-value>.xml</param-value> </context-param>
- csrf-include-uri-regex
regex (パラメーターの値として指定) に一致する URI を持つ要求は、CSRF トークンの検証が行われます。
例 (web.xml の場合):
<context-param> <param-name>csrf.include.uri.stk.1</param-name> <param-value>/stk/home.jsp</param-value> </context-param>
- csrf-bypass-uri
この値に一致する URI を持つ要求はバイパスされ、CSRF トークンは検査されません。
例 (web.xml の場合):
<context-param> <param-name>csrf.bypass.uri.stk.1</param-name> <param-value>/console/login.jsp</param-value> </context-param>
- csrf-bypass-uri-endswith
この値で終了する URI を持つ要求は、バイパスされます。
例 (web.xml の場合):
<context-param> <param-name>csrf.bypass.uri.endswith.stk.1</param-name> <param-value>.js</param-value> </context-param>
- csrf-bypass-uri-regex
regex (パラメーターの値として指定) に一致する URI を持つ要求は、CSRF トークンは検査されません。
例 (web.xml の場合):
<context-param> <param-name>csrf.bypass.uri.regex.stk.1</param-name> <param-value>[a-zA-Z0-0]*servlet/param-value> </context-param>
デフォルトでは、csrf-include パラメーターが指定されない場合でも、すべての URI が包含リストに含まれます。 URI が除外リストに存在することは、明示的に指定する必要があります。 包含リストが指定されていない場合、デフォルトでは、すべての URI が包含リストに含まれているものと見なされます。 すべての URI が CSRF トークンの検証対象になるのを避けるために、アプリケーションで特定の URI を包含リストに追加できます。
フレームワークでは、デフォルトで、gif、png、css、または js タイプのファイルを対象にした要求の CSRF 検証をバイパスするために除外リストを提供しています。
- ほとんどの CSRF 攻撃は、単に POST 要求をその同等の GET 要求に複製することによって機能します。 大抵のアプリケーションは POST 要求と GET 要求とを区別していないため、攻撃は通常機能します。 GET 要求と POST 要求とを区別するには、Struts アクションの定義で、アクションの requestMethodSupported パラメーターを使用して、バリデーターが稼働できるモードを以下のようにセットアップします。
- POST - (デフォルト) POST 要求のみ許可されます。
requestMethodSupported が設定されていないか、不明値である場合は、デフォルトで POST になります。
- ALL - GET 要求と POST 要求の両方が許可されます。
例:
<action name="accountTransfer" class="com.AccountTransfer"> <param name="requestMethodSupported">POST</param> <param name="resourceId">AccountTransfer_Action002</param> </action>
- POST - (デフォルト) POST 要求のみ許可されます。