2013-07-23 40 views
3

標題幾乎說明了一切,但總是檢查isCommitted()類型ServletResponse是否有價值?我的具體的例子是在使用一個過濾器,我這樣做,如果用戶沒有被授權執行特定動作(CSRF檢查要具體):應該ServletResponse被提交始終在修改響應之前檢查

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

在這種情況下,它幾乎感覺就像是矯枉過正我檢查了迴應。我的過濾器位於鏈條的頂端,在它之前沒有任何東西會提交響應(更不用說允許過濾器鏈繼續下去),但我不禁感覺這是一個假設,它在我不應該做的好防守編程的名字。我覺得檢查回覆的狀態是一種很好的做法。

所以,所有這一切都說,在這個時候檢查響應是否有價值?而且,爲了進一步擴大這一點,是否每次總是檢查響應被修改是一個好習慣?在我的情況下,我幾乎找不到理由支持CSRF令牌不匹配時引發的異常以外的其他情況(假設這隻會在攻擊場景中發生)。

+0

如果你應該阻止訪問該頁面,你不希望任何其他錯誤的軟件阻止你這樣做。你想*找到*這些,而不是檢查這一點肯定會幫助你做到這一點,並肯定會刪除一個安全漏洞。 – EJP

回答

0

通常,根據何時執行某些代碼,您知道響應尚未提交。我不會在任何地方添加此檢查。

有些地方我會添加: -

  • 一塊庫代碼可能在各種不同的情況下被稱爲
  • 可能之前或響應已comitted後達到
  • 異常處理代碼