Enabling CSRF and XSS protections in ZIETrans の翻訳版です。
HCL Z and I Emulator for Transformation での CSRF および XSS 保護の有効化
2021年12月8日
著者: Soumya Mallappa / Senior Software Engineer at HCL Software
クロスサイトリクエストフォージェリ(CSRF)とは、悪意のあるWebサイト、メール、ブログ、インスタントメッセージ、プログラムが、ユーザーのWebブラウザに、ユーザーが認証された信頼できるサイト上で望ましくないアクションを実行させることで発生する攻撃の一種です。例えば、この攻撃では、ユーザーのコンテキストで、資金の送金、パスワードの変更、アイテムの購入などが行われる可能性があります。
CSRFトークンと同一オリジンポリシーは、ZIETransでCSRF攻撃を防止する2つの異なる方法です。ユーザーは要件に応じて、これらのいずれか、または両方を選択することができます。
CSRFトークンとは、サーバーサイドのアプリケーションによって生成され、クライアントが発行する後続のHTTPリクエストに含めるためにクライアントに送信される、ユニークで予測不可能な秘密の値です。トークンが発行されると、サーバーは、クライアントからのリクエストに期待通りのトークンが含まれているかどうかをチェックします。トークンがない場合や無効な場合、そのリクエストは拒否されます。
同じオリジンポリシーにより、不正なオリジン/ウェブサイトから発信されたプロトコルを持たないURLから発信されたリクエストは破棄されます。
クロスサイトスクリプティング(XSS) は、クライアントサイドのコードインジェクション攻撃です。攻撃者は、正当なWebページやWebアプリケーションに悪意のあるコードを含めることで、被害者のWebブラウザで悪意のあるスクリプトを実行することを目的としています。ユーザーは、ZIETransプロジェクトでいくつかのXSSセキュリティパラメータを設定することで、ZIETransでこの攻撃を回避することができます。
このブログでは、ZIETransでどのようにCSRFとXSSから保護できるかを理解します。
`
図1: 同一生成元ポリシーおよびトークンベースの保護の有効化
変更内容を保存します。
「ナビゲーター」タブ >「Web Content」フォルダ >「Web-INF」フォルダを開きます。web.xml ファイルを開きます。
HatsCSRFValidationFilter」という記述を探します。target.origin "と "source.origin "のパラメータを、以下のようにお客様のZIETransのURLに更新してください。デフォルトでは、空白になっています。
<filter>
<description>このフィルターはcsrf攻撃を検証するために起動されます</description>
<display-name>HatsCSRFValidationFilter</display-name>
<filter-name>HatsCSRFValidationFilter</filter-name>
<filter-class>
com.ibm.hats.runtime.filters.HatsCSRFValidationFilter
</filter-class>
<async-supported>false</async-supported>
<init-param>
<param-name>source.origin</param-name>
<param-value>https://localhost:9083/ZIETrans/</param-value>
</init-param>
<init-param>
<param-name>target.origin</param-name>
<param-value>https://localhost:9083/ZIETrans/</param-value>
</init-param>
</filter>
URLをカンマで区切ることで、以下のようにparam-valueに複数のURLを指定することができます。
<param-value>https://localhost:9083/ZIETrans/, https://zietransapp.com/</param-value>
ZIETransのweb.xmlファイルを開き、以下のパラメータをNOからYESに更新します。デフォルトでは、これらのパラメーターはNOに設定されています。
<init-param>
<param-name>Content-Security-Policy</param-name>
<param-value>YES</param-value>
</init-param>
<init-param>
<param-name>X-XSS-Protection</param-name>
<param-value>YES</param-value>
</init-param>
<init-param>
<param-name>X-Content-Type-Options</param-name>
<param-value>YES</param-value>
</init-param>
``