当前位置: 首页 > 知识库问答 >
问题:

在复制JSESSIONID cookie时防止复制会话

徐洋
2023-03-14

背景:我在tomcat上部署了一个javaee webapp,它使用基于表单的身份验证。当web服务器接收到登录请求时,它将该请求发送到一个专用的身份验证服务,该服务验证用户登录(用户id和密码)。验证成功后,用户的会话将在web服务器中维护。

问题:我在这里编写了一个简单的webpp源代码,以模拟该场景。成功登录后,当前HttpSession实例无效,并创建新实例。对于post登录页面的每个请求,都会验证会话。设置一个新的JSessionIDcookie,用于在会话期间标识用户,直到会话过期或用户注销。这个cookie可以很容易地在浏览器的开发工具中查看。如果我复制cookie并通过JavaScript在不同的浏览器中设置它(document.cookie=“jsessionid=xyzz”),然后尝试访问post login页面,服务器将其标识为有效请求,并成功验证会话。post login页面不会向用户询问用户Id和密码。

POC:用户打开chrome并输入URLhttp://localhost:8080/mywebapp/,然后使用adminpass1234登录。成功登录主页时,将显示http://localhost:8080/mywebapp/home。现在JSessionIDcookie被复制并在Firefox中设置。用户在Firefox中输入http://localhost:8080/mywebapp/home,将显示主页,而无需询问用户ID和密码。

问题:当同一个会话在多个浏览器上复制时,如何防止这种情况?

共有1个答案

娄森
2023-03-14

您无法阻止这种简单地从自己的浏览器中复制cookie的特定情况(或者从Internet上某个无知的人发布的HTTP有效负载copypaste/screenshot中复制cookie值)。您最多可以防止cookie被XSS或中间人攻击所劫持。

所有这些都在维基百科页面中关于主题会话劫持的部分进行了详细阐述,我剪掉了与会话劫持无关的部分(要么已经由Servlet API强制执行,要么在这里根本不适用)。

防止会话劫持的方法包括:

    null
    null
<session-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>
  • servlet是如何工作的?实例化、会话、共享变量和多线程
  • 如何防止在重定向的URL末尾添加jsessionid
  • 在spring MVC中删除url重写中的jsessionid
 类似资料:
  • 我在我的页面上有一组选项卡,当点击时,将活动选项卡切换到点击选项卡的值。这工作得很顺利,但是当我看到新的活动标签周围有一个蓝色的大焦点框时,我嘴里留下了一股酸味。有没有一种React-y方法来防止这种情况? 带有preventDefault()的onMouseDown={this.someMethod}是否可以工作?

  • 我有一些hazelcast http会话复制特性的问题。 我有些问题: 在同一个tomcat集群中有没有可能有hazelcast封装的应用程序和非hazelcast封装的应用程序? 带有hazelcast的应用程序应该是可分发的?(通过像其他方法一样添加它的web.xml) 部署应用程序的Tomcat不应该在集群中?是否可以在同一tomcat中使用标准tomcat会话复制将其他应用程序群集化? 编

  • 问题内容: 我正在用PHP编程一个Web API客户端,该客户端将CSV数据解析为关联数组,并且在使用这些数组时,我想保护我的用户免受数据重复。 我的用户永远不会写这些数组(从理论上讲可以,但是在实践中没有意义)。 现在我的问题是…如果我的用户将这些数组作为方法的参数传递,PHP的写时复制机制将防止数据重复,或者任何未明确接受对数组的引用的方法都将收到完整副本的阵列? 问题答案: 顾名思义,写时复

  • 我是Java的新手,并试图了解集合。当我试图将一个ArrayList复制到另一个时,我遇到了异常。请在下面找到相同的代码。 异常:线程“main”中的异常 java.lang.IndexOutOfBounds异常:Source 不适合 java.util.Collections.copy(未知来源) at ArrayListTest.main(ArrayListTest.java:19) 如果我做

  • 问题内容: 我正在本地计算机上的Tomcat 7上设置群集/复制,以评估它是否可与我的环境/代码库一起使用。 建立 我在不同端口上运行的同级目录中有两个相同的tomcat服务器。我已经在其他两个端口上监听了httpd,并作为VirtualHosts连接到了两个tomcat实例。我可以在配置的端口上访问两种环境并与之交互。一切都按预期进行。 Tomcat服务器在server.xml中启用了集群功能:

  • 问题内容: 我想创建一个表来存储设备设置。该表具有三行:id,parameter_name和parameter_value。 该表是通过执行以下查询语句创建的: 然后通过执行以下方法存储行: 创建数据库后,将存储默认值: 但是,方法insertRow()的问题在于它无法防止重复输入。 有谁知道在这种情况下如何防止重复输入? 问题答案: 您可以使用列约束。 UNIQUE约束导致在指定列上创建唯一索引