当前位置: 首页 > 面试题库 >

如何为Java Web应用程序设置httponly和会话cookie

周玺
2023-03-14
问题内容

我正在研究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。

请分享任何想法。

如果还有其他设置httponly或安全标志的方法,请提供帮助。


问题答案:

根据您的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的应用程序中注入了许多与安全性相关的响应标头。



 类似资料:
  • 我们有一个通过SSL nginx代理为HTTP提供服务的tomcat实例。我们为连接器设置了如下设置: JSESSIONID cookie是在HttpOnly和SSL上创建的。我们只想将它限制在SSL,我们似乎无法理解Java中创建会话cookie背后的逻辑。任何提示都将不胜感激。

  • 问题内容: 我需要给我的用户一个Web界面来更改会话超时间隔。因此,Web应用程序的不同安装对其会话将具有不同的超时,但是它们不能不同。 有没有办法以编程方式设置会话超时,以便我可以使用读取配置的时间间隔并在应用程序启动时进行设置? 问题答案: 代替使用ServletContextListener,而使用。 在该方法中,您可以通过编程方式设置 会话超时 : 并且不要忘记在 部署描述符中 定义 侦听

  • 类似于如何在AndroidMarshmallow上以编程方式打开特定应用程序的权限屏幕?但对于扑镖来说。

  • 几天来,我一直在为我的单页应用程序寻找安全的身份验证和会话管理机制。从大量关于SPA和身份验证的教程和博客文章来看,将JWTs存储在localStorage或常规cookie中似乎是最常见的方法,但将JWTs用于会话并不是一个好主意,因此它不是这个应用程序的选项。 null null 由于cookie具有标志,JavaScript将无法读取其内容,因此只要通过HTTPS传输,就可以安全地免受攻击。

  • 我正在开发一个使用Hibernate的简单JSF应用程序。我将所有必需的库导入WEB-INF/lib文件夹,并将它们指向类路径。但是当我尝试编译它时,我遇到了错误: 这是我创建SessionFactory并使用它的代码: 我在这里使用它: 那我做错了什么?我该怎么解决这个问题?

  • 问题内容: 如何为Android应用程序设置IntelliJ IDEA? 问题答案: 我花了整整一天的时间尝试将所有内容组合在一起,涉及数百个站点和教程,但是它们都跳过了琐碎的步骤。 因此,这里是完整的指南: 下载并安装 Java JDK (选择Java平台) 下载并安装 Android SDK (建议安装程序) android SD完成安装后,在 Android SDK Tools* 下打开 S