簡體   English   中英

如何為 Java Web 應用程序設置 httponly 和會話 cookie

[英]how to set httponly and session cookie for java web application

我正在處理 XSS(跨站點腳本)問題。 我的應用程序在 Oracle Weblogic 門戶上運行。 我們使用 Servlet 2.5 版。

我在過濾器中添加了以下 3 行代碼,用於設置 httponly 和安全 cookie,並且工作正常。

String sessionid = req.getSession().getId();
res.setHeader("Set-Cookie", "JSESSIONID=" +  sessionid + ";HttpOnly");
res.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; secure");

問題是當我在同一瀏覽器中注銷並立即登錄時。 我能夠登錄,但在那之后,在 jsp 頁面上,我遇到了會話超時問題。 我們使用 weblogic 相關的 api。 request.getuserprinical() api 返回 null.. 猜測它設置為 null。

請分享任何想法。

如果還有其他設置httponly 或secure 標志的方法,請幫助。

根據您的 Web 容器的具體情況,在應用程序中修改容器管理的會話 cookie 可能會導致應用程序服務器丟棄現有會話並創建一個新會話。 我已經在 Tomcat 上觀察到了這一點,但它可能與 Weblogic 類似。

如果您使用的是 Servlets 3.0,您實際上可以使用以下片段指示應用服務器確保所有會話 cookie 都是 HttpOnly 和 Secure 的:

<session-config>
  <cookie-config>
    <secure>true</secure>
    <http-only>true</http-only>
  </cookie-config>
</session-config>

這是比使用過濾器手動破解 cookie 更好的方法。

僅供參考:我還編寫了一個Java 庫,它在基於 Servlet 的應用程序中注入了許多與安全相關的響應標頭。

您需要使用以下語法來設置 httponly 和 Secure 標志

JSESSIONID=ABC3423DF...SDF;HttpOnly;Secure

我在 web.xml 中使用了<http-only><secure>標簽來設置安全屬性並且它起作用了。

<session-config>
 <cookie-config>
  <http-only>true</http-only>
 </cookie-config>
<session-config>

暫無
暫無

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

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