我正在实施基于令牌的系统,以防止基于请求工厂的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内部服务器错误而不是401。
任何人都可以阐明为什么会这样做以及我应该采取哪些不同的做法?
答案 0 :(得分:0)
您提供的有关500内部服务器错误原因的信息非常少。请共享异常堆栈跟踪(500内部服务器错误会抛出一个)。
如果不是基于GWT建议,也应避免实施自定义的。请在CSRF with RequestFactory上阅读此stackoverflow查询。