tomcat - 登录用户的 session 在 tomcat 上的 grails spring security 中混淆

标签 tomcat grails spring-security session-hijacking

我有一个使用 spring-security 进行用户和角色管理的 grails 应用程序。 因为,过去几天我遇到了一个奇怪的问题:当一个用户在某个时候登录时,该用户变成了另一个用户( session 混淆)。

示例:用户 A 登录到系统,用户 B 从另一个浏览器登录到系统,当通过 Controller 操作时,在某个随机点,用户 A 成为用户 A 系统中的用户 B,用户 B 也是如此。

此问题在生产阶段而非开发阶段。

我在互联网上发现了一些类似的案例,但没有找到 grails。 Spring Security/JSF/Hibernate Accidental Session Hijacking on Tomcat? ,这个类似的但是在 jsf 和提到的解决方案中似乎对我不起作用。另一个是 Session mix up - apache httpd with mod_jk, tomcat, spring security - serving data of other user但这里的问题似乎是因为 mod_jk 而不是我的情况(我没有使用过 mod_jk)。

我的系统版本:

  • Grails 版本:3.2.4
  • 常规版本:2.4.7
  • JVM 版本:1.8.0_05
  • 服务器版本:Apache Tomcat/8.5.14
  • JVM 版本:1.8.0_121-8u121-b13-0ubuntu1.16.04.2-b13

最佳答案

终于找到问题了。

罪魁祸首是 ISP(目前在尼泊尔的 Subisu 和 Mercantile 发现)。 他们实际上会缓存请求的整个页面,并且当另一个用户在特定时间范围内(几个小时)请求相同的 url 时,如果两个用户都在同一个 ISP 网络中,缓存的页面将呈现给下一个用户。

我是如何发现我的问题的: 我做了一个实验。首先,我在同一个 ISP 的不同计算机上以两个不同的用户登录,我立即发现了问题。 然后我注销了该 ISP 中的一个用户,与该 ISP 断开连接,连接到另一个 ISP 并登录到系统。 现在,我在 ISP1 的 Computer1 中有 User1,在 ISP2 的 Computer2 中有 User2,即使浏览了半小时也没有发现问题。

我是如何修复它的: 我生成了唯一的 uuid 并附加到每个菜单链接。这使得每个 url 都不同,已经 4 天了,甚至一次都没有发现问题。 在某些菜单中,我没有放置唯一的 uuid 并且仍然是问题,但在我放置了唯一字符串的菜单中没有。

关于tomcat - 登录用户的 session 在 tomcat 上的 grails spring security 中混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44535085/

相关文章:

mysql - 如何结合2个Grails应用程序,共享同一个数据库?

grails - 从网址映射永久重定向而参数不起作用,grails

mongodb - Grails MongoDB 列表不更新,我做错了什么吗?

Spring Security OAuth - 如何禁用登录页面?

Tomcat XSS 问题 - URL 参数中的 <script> 标记

无需重启即可重新加载 Tomcat AccessLogValve 模式

ajax - JSON REST Get-Request 正在等待 Tomcat for Chrome/Firefox 上的 CORS

apache - Docker 在运行 Docker 启动命令时无法执行初始化脚本

java - 将 Spring Security 2.5 升级到 3.1 - java.lang.NoClassDefFoundError : org/springframework/security/Authentication

ssl - Spring 3.1 的混合模式 X509 身份验证