Java 会话 (HttpSession) 是否验证 IP 地址?

Does a Java session (HttpSession) validate IP addresses?

使用Java的ServletAPI通过HttpSession接口提供的Session管理,创建cookie JSESSIONID。此 cookie 用于验证用户是否创建了会话。

但是,Servlet 是否验证此 JSESSIONID 值来自创建会话的同一台机器?

我知道 XSS(跨站点脚本)攻击可以窃取用户的会话 cookie,但是当恶意用户将 JSESSIONID 发送回服务器时,he/she 能够检索会话的内容?或者服务器验证发送JSESSIONID的用户的IP?

为用户创建会话时,

  • 在服务器端创建了一个会话 ID。
  • 这个会话 ID 被发送到发送请求的浏览器
  • 此 ID 存储在名为 JSESSIONID 的 cookie 中
  • 浏览器为后续请求发送此 cookie
  • 服务器知道服务器端的会话 ID 并使用 cookie 中的进行验证
  • 未检查后续请求的 IP 地址。使用 jsessionid
  • 识别会话

HTTP 是无状态协议,JSESSIONID 值(以 cookie 的形式或作为 URL 参数)在每个请求中传递,以指示服务器请求属于由 JSESSIONID 值表示的会话.服务器使用 JSESSIONID 作为键来维护会话对象,该键用于将会话对象与请求相关联。它不维护客户端 ip 和会话 id 之间的关系,如果这是你的意思 "server validates IP of the user sending the JSESSIONID"。因此它不会为给定的会话 ID 执行客户端 IP 验证。

不,服务器不验证 ip 地址。这就是为什么可能存在会话窃取的原因。并且,Servlet 引入了一些措施来避免它们。

不,它不检查同一会话中后续请求之间的 ip 地址是否相同。但是,您可以获得该 ip 地址并使用其他名称保存在会话中,并且可以通过您的 sel

检查