我正在尝试使用建议的在客户端阻止 cookie 时维护会话状态的方法来确定是否存在安全漏洞。
通常,如果 UUID 与数据库中存储的内容匹配,我会将 UUID 存储在客户端 cookie 中并自动登录。但是,如果客户端阻止了 cookie,我将无法访问他们机器上的 UUID,因此必须解决使用他们的 IP 地址并以这种方式与数据库匹配。
我使用以下方法确定 IP 地址:
String ip = request.getHeader("X-FORWARDED-FOR");
if(ip == null) {
ip = request.getRemoteAddr();
}
我在这方面有点绿,但我认为这种方法可能存在安全漏洞。例如,如果用户在公共 wifi 网络上访问应用程序(在咖啡店、机场、酒店......无论如何),它将存储公共 ip 并将他们的帐户与该 ip 匹配。除非他们特别记得注销,否则任何以同一个 IP 进入他们身后的人都可以完全访问他们的帐户。我该如何防止这种情况?除了匹配ip之外,当cookie被阻止时,我并不完全反对使用另一种方法。我只是不确定除了在 cookie 不可用时完全禁止用户登录之外,他们还有什么其他方法。这是唯一真正安全的方法吗?
更新
根据 TJ Crowders 的评论,最近的统计数据显示 2% 的用户实际阻止了 cookie。出于多种原因,我选择依赖 cookie,并在由于 cookie 被阻止而无法管理会话状态时显示警告。