我正在尝试使用建议的在客户端阻止cookie时维护会话状态的方法来确定是否存在安全漏洞。
通常,我将UUID存储在客户端cookie中,如果UUID与数据库中存储的内容匹配,则会自动登录。但是,如果客户端阻止了cookie,那么我将无法在其计算机上访问UUID,因此必须决定使用其IP地址并以这种方式与数据库进行匹配。
我使用以下方法确定IP地址:
String ip = request.getHeader("X-FORWARDED-FOR");
if(ip == null) {
ip = request.getRemoteAddr();
}
我在这方面有点绿色,但是我认为这种方法可能存在安全漏洞。例如,如果用户通过公共wifi网络(在咖啡店,飞机场,酒店等)访问应用程序,它将存储公共ip并将其帐户与该ip相匹配。除非他们特别记得注销,否则使用同一IP在其后进入的任何人都将具有对他们帐户的完整访问权限。我该如何预防?我不完全反对使用另一种方法来阻止Cookie,除了匹配ip之外。我只是不确定除了cookie不可用时完全禁止用户登录之外,他们还可能采用其他什么方法。这是唯一真正安全的方法吗?
更新
根据TJ Crowders的评论,最近的统计数据表明,实际有2%的用户阻止了cookie。由于多种原因,我选择依赖Cookie并在由于Cookie被阻止而无法管理会话状态时显示警告。
...但是我认为这种方法可能存在安全漏洞。例如,如果用户通过公共wifi网络(在咖啡店,机场,酒店等)访问该应用程序...
不仅如此。在家中拥有无线宽带的人们似乎都来自同一个IP,因此,如果两个在一起生活的人都希望同时使用您的站点(也许一个人向另一个人推荐了您的站点),他们就会发生冲突。
如果您不能使用cookie,则可以使用旧的J2EE技术将会话ID放入每个URL中。如果您已经在使用J2EE,则可以使用对此的内置支持(HttpServletResponse#encodeURL
将;jsessionid=token
在URL上使用)。如果不是这样,使用查询字符串参数来实现该技术就足够简单了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句