Request Factory ベースの GWT アプリで CSRF 攻撃を防ぐために、トークン ベースのシステムを実装しています。
サーバー側でフィルターを実装するために、RequestFactoryServlet の doPost メソッドをオーバーライドしました。
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String sessionToken = CsrfTokenManager.getToken(request.getSession());
String requestToken = request.getHeader(CsrfTokenManager.CSRF_TOKEN_NAME);
if (sessionToken.equals(requestToken)) {
super.doPost(request, response);
} else {
logger.error(String.format("Received unsafe http request [%s]", getFullRequest(request)));
response.sendError(401,"Unsafe HTTP Request");
}
}
これは、有効なトークンのないリクエストの処理を許可しないという点で機能し、ログには適切なメッセージが含まれていますが、返されるエラーは 401 ではなく 500 内部サーバー エラーです。
これがなぜなのか、そして私が何をすべきかについて誰かが光を当てることができますか?