簡體   English   中英

在JSESSIONID cookie中設置httponly(Java EE 5)

[英]Setting httponly in JSESSIONID cookie (Java EE 5)

我正在嘗試在JSESSIONID cookie上設置httponly標志。 但是,我在Java EE 5中工作,不能使用setHttpOnly() 首先,我嘗試使用response.setHeader()從servlet的doPost()創建自己的JSESSIONID cookie。

當這不起作用時,我嘗試了response.addHeader() 那也行不通。 然后,我了解到servlet處理將會話轉換為JSESSIONID cookie並將其插入http頭中,因此如果我想使用該cookie,我將不得不編寫一個過濾器。 我寫了一個過濾器並在setHeader()setHeader() / addHeader() ,再次無濟於事。

然后,我了解到響應對象在進入過濾器之前會有一些刷新/關閉動作,所以如果我想操縱數據,我需要擴展HttpServletResponseWrapper並將其傳遞給filterChain.doFilter() 這已經完成,但我仍然沒有得到結果。 顯然我做錯了但我不知道是什么。

我不確定這與手頭的問題是否完全相關,但servlet沒有將任何html文檔返回給瀏覽器。 所有真正發生的事情是正在填充一些對象並將其返回到JSP文檔。 我有點假設Session對象被轉換為JSESSIONID cookie,並在發送到瀏覽器之前將其與添加到請求中的對象一起包裝在http標頭中。

我很樂意發布一些代碼,但我想排除我的困難源於對該理論的誤解的可能性。

由於JSESSIONID cookie由servletcontainer管理,因此該設置是特定於servletcontainer的。 目前還不清楚你正在使用哪一個,所以這里是一個Apache Tomcat 6.0目標答案,這樣你就知道你需要在哪個方向尋找你的servletcontainer:你需要將webapplication的<Context>元素的useHttpOnly屬性設置為true

<Context useHttpOnly="true">
    ...
</Context>

另請參閱有關<Context>元素的Tomcat文檔

您可以在Java EE 5中使用它:

對於Java EE 6之前的Java Enterprise Edition版本,常見的解決方法是使用顯式附加HttpOnly標志的會話cookie值覆蓋SET-COOKIE http響應頭:

String sessionid = request.getSession().getId();
// be careful overwriting: JSESSIONID may have been set with other flags
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly");

資料來源: https//www.owasp.org/index.php/HttpOnly

我把它測試成一個過濾器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM