2010-11-03 61 views
2

我正试图解决ATG/JBoss/Tomcat站点上的会话固定/劫持/劫持问题。看来,到目前为止,最公共的建议是:会话劫持:抑制会话ID的过滤器的优点/缺点

  1. 授予新的会话用户登录时,这可以防止攻击者能够预测受害者的会话ID。我首先尝试了这种方法,但我担心it may not work in my case

  2. 使用servlet filter可以在URL中传递会话ID(SID)时使会话无效。该过滤器还可以防止URL重写以创建链接w/SID

#2的优缺点是什么?有些我已经想到了:

优点

  1. 这似乎是比#1一个更广泛的保护:#1防止恶意URL被传递给受害人,#2防止任何手段获取SID(不安全的无线网络,对机器的访问等) - 你不能仅仅传递你想要使用请求参数的SID!

缺点

  1. 会话管理会出手的用户,无需启用Cookie。
  2. 如果用户点击指定的链接w/jsessionid,普通用户将被注销,但由于过滤器的行为,我不相信系统中会有任何合法链接。

回答

2

2要停止Session Fixation

您还需要考虑CSRF aka“会议骑术”。 Here是防止CSRF的方法。

最后,不要忘记最容易忽视的OWASP,OWASP A9 - Insufficient Transport Layer Protection。这意味着您的会话ID必须始终通过HTTPS 进行传送,时间为。如果你不这样做,那么有人可以使用Firesheep来获取帐户。

+0

好点。这些漏洞的存在是否被认为是方法2的赞成或反对?我注意到CSRF的一个常见修复实际上是使用URL重写,感叹。 – 2010-11-03 19:33:29

+0

@Adam Rabung他们是无关的。我不知道url-rewriting如何停止csrf ...(http://www.owasp.org/index。php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet) – rook 2010-11-03 21:47:40

+0

url重写会导致一个唯一的id(有效会话id)在url中,这使得构建一个有效的csrf链接变得非常困难。我认为。 – 2010-11-03 23:49:17

1

你可以在会话中存储一个变量,包含用户的IP,用户代理等或者它们的散列,并检查它的每一个请求,以便如果它被劫持,劫持者将不得不伪造这些变量。

不完美,但它有帮助。

+0

你是对的 - 方法#2真的只会击败不知道如何伪造标题的攻击者。这有助于。 – 2010-11-03 21:03:03

+0

我也一样,当用户通过代理服务器访问服务并且代理IP从一个请求改变到另一个时,会产生问题。这些IP不匹配并且登录合法用户会被注销。这是一个问题 – Ironluca 2015-08-19 11:30:50