2009-04-09 264 views
3

我正在开发一个公共站点,它将使用键入会话ID的数据库支持的用户会话。我试图阻止会话劫持和篡改;我返回给客户的会话数据本身价值有限,但我想防止批发盗窃。我在这里制定了一个小计划,但我想获得一些反馈和批评。会话安全

  • 当会话开始时,会为客户端提供唯一密钥和会话数据的散列。
  • 对于每个后续请求,客户端都会发送会话密钥+会话数据的散列。
  • 如果会话数据被修改,则会向客户端提供反映其会话数据的新哈希值。
  • 如果请求中存在与数据库不匹配的不正确散列,会话将被标记为已泄露。该会话的请求和所有后续请求都会导致通过复制受损会话创建新会话。为了安全审计目的,新会话引用它们从中复制的会话。

我想我可以看到受到攻击的请求扫描大规模的攻击。

非常感谢提前。

回答

2

这似乎是相对安全的,但也有几个方面,这可以规避:

  • 如果会话密钥被窃取,哈希可以过被盗。只要合法​​的客户端不做任何事情,劫持者就可以接管并保持密钥/散列/数据的一致性。除非合法客户醒来,否则您不会看到任何东西。在任何情况下,如果你的散列没有足够的隐蔽性/安全性,它可以简单地从数据中猜出来(它也可能被嗅探到)。您应该使用某种随机盐(每个会话,每个用户,每个时间段......)以确保这是难以猜测的。

+0

就像旁白一样,没有安全措施甚至是完全紧张......你只需要按比例的努力来保护你的系统到如果违反,则需支付费用。过多的安全性可能会像代价一样太小...... – Varkhan 2009-04-09 18:48:56

0

听起来不错。

您可能想要将身份验证算法引入的一件事是用户来自的IP地址。

对于当前的用户身份验证来说,它可能不是那么好,但是如果会话遭到破坏,不同的IP将成为一个巨大的标志,但您可以使用该信息添加到阻止潜在恶意用户的IP表规则。

另一个想法是跟踪引荐网址。关于恶意行为,如果有人来自任何一致性,可能会在程序中留下漏洞(如果有的话)。

2

我不明白会话数据散列点是什么。它解决了什么问题?

它可能会导致问题,例如,当同时在两个选项卡中加载两个页面时。如果第一个请求更改会话数据,但另一个已经发送,则它将具有不正确的散列。

另外,如果你复制旧会话,我不知道你用这个做了什么?

只是有一个简单的会话ID和:

  • 改变它的登录,避免会话固定和
  • 其锁定到一个IP,以避免攻击者通过假设控制sidejacking。

要防止攻击者看到数据,您必须使用SSL。

+0

散列背后的想法是检测由客户以外的人篡改会话。通过复制(分支)会话,即使会话被劫持,我也允许客户端继续。 (或者我认为,直到我阅读Varkhan的评论。) – Paul 2009-04-09 19:01:44

0

你不能指望IP地址是唯一的或没有改变。企业防火墙经常通过NAT转换合并甚至随机更改IP地址。它可以使系统更安全,但是它会对服务器的认证方案造成严重破坏,这些方案试图要求相同的IP地址。

在过去的几年里,还有另外一个问题 - 系统的移动性比过去多得多。我经常'休眠'我的笔记本电脑,而不是关闭他们,但这意味着我来自不同的IP地址在家中,工作,星巴克等。这可以跳过服务器会话超时短至15-30分钟 - 它只需要我的时间来从我的办公室到午餐等。