0

我正在为一个小网站做一个简单的购物车。

我计划存储购物车项目以及在会话变量中登录 user_id。

为了让事情更安全一点,我想我会这样做:

  1. sha1() 将 user_id 存储在会话中之前。

  2. 还 sha1() 并将 http_user_agent 变量与一些盐一起存储,并将其与 user_id 一起检查。

我知道还有更多可以做的,但我认为这至少有很大帮助,对吧?我很容易实现。

4

3 回答 3

3

我认为您误解了会话劫持的含义。您的第一个想法似乎根本无法防止会话劫持。

当您进行会话劫持时,您就是在窃取某人的会话 ID 并假装是该会话 ID。用户无法更改任何实际的会话数据,因此您是否加密/散列任何内容并不重要,因为他们将无法访问它。

您可能想要做的是将 IP 和用户代理字符串存储在会话中,并在每次页面加载时声明用户登录之前检查它。如果 IP 和用户代理不匹配,您可能应该提示他们登录。(好吧,至少确保用户代理相同)

于 2010-05-26T22:11:23.327 回答
1

通常会话劫持指的是个人试图访问另一个人的会话,通常是通过客户端的数据替换。

例如,人 X 在 twitter.com 上填写登录表单。Twitter.com 向 X 发送一个 cookie。Y 人窥探数据包并手动将该 cookie 插入他们的浏览器并访问 twitter.com 以发现他们已登录。这是会话劫持。

然后是会话固定,我给你一个链接http://www.blah.com/?phpsessid=1234然后祈祷你去那里登录,没有注意到 URL 中的 PHPsessid。如果你这样做了,并且网站没有重新生成会话 ID(因为它总是应该在权限状态更改时),那么黑客现在可以访问 blah.com/?phpsessid=1234,他们将以你的身份登录。通过这种方式,他们不必窥探会话 id,因为他们是给你的人。

这是一个很好的网站,其中包含有关防止基本 PHP 会话劫持的信息,我相信这可以成为您研究的入门书。

http://phpsec.org/projects/guide/4.html

于 2010-05-27T00:49:10.427 回答
1

我认为这至少有很大帮助,对吧?

并不真地。散列 user_id 没有任何作用,因为 user_id 可能已经是您会话的一部分。

散列 IP 或 UA 并要求它匹配是一种弱验证形式,也会给您带来严重的可访问性困难。代理用户每次可能来自不同的地址;用户可能拥有定期更改的动态 IP;一个 IP 可能代表许多实际客户。总而言之,这将导致比它解决的问题更多的问题。

在任何情况下,这对 XSRF 攻击都没有任何作用,其中 IP 和 UA 都将完全匹配。有关反 XSRF 策略的一些讨论,请参阅此问题。

于 2010-05-26T23:37:19.797 回答