web-dev-qa-db-ja.com

サーバー側でCSRFGuardトークンを検証する方法は?

アプリケーションをCSRF攻撃から保護するために、OWASP CSRFGuardライブラリを実装しました。 CSRFGuard JavaScriptファイルとサーブレットを使用して、すべてのAjaxリクエストにCSRFトークンを挿入しています。これまでのところ、すべてのリクエストにトークンが適切に追加されています。

私の質問は、このトークンが有効であり、サーバー側のライブラリによって認識されていることを検証する方法ですか?トークンをサーバー側に取得できますが、比較するものはありません。私の懸念は、攻撃者が任意の値を挿入する可能性があり、アプリがこれが有効かどうかを知らないことです。

このトークンをリクエストから削除して変更し、フィルターがリクエストを拒否していないことに気付いたので、このトークンの検証はサーブレットに実装する必要があるものだと思いますよね?しかし、どうやって? CSRFGuardクラスを確認しましたが、JavaScriptサーブレットによって生成されたトークンを格納するクラスは見つかりませんでした。

1
Lennin

サーバー側でトークンを検証する方法を探すために数週間コードを調べたところ、HttpSession session変数に格納されていることがわかりました。 fetchCsrfTokenクラスのJavaScriptServletメソッドを見てください。

これに基づいて、サーバー側でトークンを次のように検証しています。

String CSRFToken = request.getHeader("OWASP_CSRFTOKEN");
if(CSRFToken.equals(tokenValue)) { 
    // Code to execute if the token is valid 
} else { 
    // Code to execute if the token is not valid
}

これがOWASP CSRFGuardライブラリを使用する他の人に役立つことを願っています。

1
Lennin