0

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

谁能阐明为什么会这样以及我应该做些什么不同的事情?

4

1 回答 1

0

关于 500 内部服务器错误的原因,您提供的信息很少。请分享异常堆栈跟踪( 500 internal server error would have throwed one)。

如果不是基于 GWT 建议,也应避免实施自定义。使用 RequestFactory阅读 CSRF 上的这个 stackoverflow 查询。

于 2013-08-19T04:06:14.467 回答