是否应该在修改响应之前始终检查ServletResponse

时间:2013-07-23 18:37:56

标签: java http httpresponse

标题几乎不言自明,但总是在类型isCommitted()上检查ServletResponse是否有价值?我的具体示例是使用过滤器,如果用户无权执行某项操作(CSRF检查具体),我会执行以下操作:

if (!httpResp.isCommitted()) {
    httpResp.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}

在这种情况下,我几乎感觉有点过分,我已经检查了回复。我的过滤器位于链的顶部,在它之前应该没有任何东西可以提交响应(更不用说允许过滤器链继续进行),但我不禁感到这是一个假设,我不应该做的好防守编程的名称。我觉得检查响应的状态是个好习惯。

所以,所有这一切,是否有必要在此时检查响应?为了进一步扩展这一点,每次响应被修改时总是检查是一种好习惯吗?就我而言,当CSRF令牌不匹配时,我几乎找不到支持除了抛出异常之外的其他东西的理由(假设这只会发生在攻击场景中)。

1 个答案:

答案 0 :(得分:0)

通常,根据执行某些代码的时间,您知道响应尚未提交。我不会在任何地方添加这个检查。

我会添加一些地方: -

  • 可以在各种不同的上下文中调用的一段库代码
  • 在响应被提交之前或之后可能达到的异常处理代码