3

我知道以下是在 java 中维护或会话跟踪的方法,但正在寻找一个好的方法

  • 网址重写
  • 隐藏的表单域
  • 饼干
  • 会话对象,如 setAttribitute() 和 session.getAttribute()

如果客户端浏览器已阻止接受和存储 cookie,则最后两种方式无效。在隐藏表单字段中,我需要在表单内的每个页面中传递隐藏值。所以假设如果我只是使用response.sendRedirect()那么隐藏表单字段是不使用。剩下的是 URL 重写,我将在 URl 中传递 JsessionID。所以我的问题是知道 sessionID 不是未经授权的人可以访问这些页面。例如有3个页面登录,注册,发送。所以登录后用户可以注册和/或发送。所以如果有人知道sessionID,他/她不能直接进入注册/发送页面。如果是请告诉我如何禁止这个

4

4 回答 4

2

从 Servlet 3.0(Apache Tomcat 7 起)开始,如果您使用 SSL,那么您可以配置您的应用程序以根据 SSL 会话 ID 跟踪会话。缺点是一切都必须通过 SSL。优点是会话与 SSL 连接紧密相关。只有创建与具有正确 SSL 会话的服务器的连接的用户才能访问该会话。即使攻击者知道会话 ID,他们也无法访问会话。

需要注意的是,这种形式的会话跟踪是使用最少的,因此它可能没有像更常见的 cookie 和 URL 重写机制那样经过严格测试。

于 2013-10-25T08:23:28.143 回答
1

看看这个链接,其中概述了Best practices for using HTTP sessions

包含

  • javax.servlet.http.HttpSession.invalidate()
  • 使用 HTTPS
于 2013-10-25T06:38:37.003 回答
0

会话跟踪和身份验证是两个不同的东西,不要把它们放在一起。

了解您的要求我看到您想要保护用户的 sessionid。

  1. Evasdroping:如果有人在中间列出请求和响应,他可以获取 sessionid 并使用它。最好的方法是使用 SSL。这样可以确保没有人在中间听。
  2. 从客户端窃取的 Sessionid:通常这应该由浏览器和操作系统来处理。因此,您的用户与他拥有的系统一样安全。
于 2013-10-25T06:48:22.833 回答
0

使用标准解决方案是无法做到的。

您可以通过添加请求发起者 IP 地址验证来增加一些安全措施,但这也很容易被愚弄。(在这里澄清一些意味着非常微小的一点点)

所以安全路线是不使用 URL 重写来维护安全应用程序中的会话。

但是,您可以通过将 JSessionID 保留为单独的加密属性来获得一些安全性,该属性将由位于客户端和应用程序服务器之间的中间件或负载平衡服务器解密。这当然只是一个想法,幸运的是我没有尝试过这样的事情:-)

于 2013-10-25T06:32:12.627 回答