使用GWT RequestFactoryServlet进行CSRF过滤

时间:2013-08-16 10:01:42

标签: gwt servlet-filters csrf requestfactory

我正在实施基于令牌的系统,以防止基于请求工厂的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。

任何人都可以阐明为什么会这样做以及我应该采取哪些不同的做法?

1 个答案:

答案 0 :(得分:0)

您提供的有关500内部服务器错误原因的信息非常少。请共享异常堆栈跟踪(500内部服务器错误会抛出一个)。

如果不是基于GWT建议,也应避免实施自定义的。请在CSRF with RequestFactory上阅读此stackoverflow查询。