我正在实施一个基于令牌的系统,以防止我的基于请求工厂的 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");
}
}
这样做的原因是它不允许处理没有有效令牌的请求,并且我的日志包含一条合适的消息,但我得到的错误是 500-Internal Server Error 而不是 401。
谁能阐明为什么会这样以及我应该做些什么不同的事情?