3

我使用 HTTPS,但希望最大限度地降低某人使用其他人最近实际使用的会话 ID 制作自己的 cookie 的风险。

作为会话变量,我有一个到期时间,因此如果最近没有使用会话,它就会失效,所以我认为机会之窗是受害者处于活动状态或最近离开站点而没有正确注销的时候。

我不希望有大量的流量,我使用标准的 php 方法来生成会话 ID。我相信有人真正成功(甚至尝试)在这里劫持某人的会话的“风险”接近于零。

我想要做的是以某种方式“识别”远程用户,而不使用$_SERVER['REMOTE_ADDR']. 我的想法是攻击者必须找到一个有效的会话 ID,以及模拟实际用户的不同属性。

我不想强迫用户使用证书登录。我希望它可以在所有标准的网络浏览器中工作,即使对于我的祖母和其他像她这样的非技术人员也是如此。

那么,我最初想问的是:HTTPS 会话是否有任何“属性”可以使用?它们会有用吗?如果是这样,我该如何找到它们?phpinfo()没有显示任何 HTTPS 特定的内容。(是因为httpd不暴露吗?)

我应该只使用HTTP_USER_AGENT+ HTTP_ACCEPT+ HTTP_ACCEPT_LANGUAGE+ HTTP_ACCEPT_ENCODING+的串联HTTP_ACCEPT_CHARSET或类似的东西,假设在用户之间足够独特吗?

很高兴所有的答案!(但请在回答之前阅读问题,仅参考 StackOverflow 上的其他问题)谢谢!

4

2 回答 2

3

您需要确保在会话 cookie 上设置了安全和 http_only 标志。您还需要在用户进行身份验证时更改 session_id 以避免会话固定问题。

虽然您的建议在指纹识别方面应该是相对安全的,但它并不是那么有选择性 - otoh 有很多东西不应该用于指纹识别(如 CLIENT_ADDRESS),因此提出更好的建议并不是很容易。

除了我上面的建议之外,我建议您花时间研究其他潜在的安全问题。

C。

于 2010-07-15T15:49:10.260 回答
2

OWASP top 10是此类攻击的极好帮助。具体来说,您需要担心这三个:

A2:跨站脚本(XSS)

A3:损坏的身份验证和会话管理。

A5:跨站请求伪造(CSRF)(也称为“会话骑乘”)

几乎所有的 $_SESSION 变量都为攻击者所知,并且可以是任何值。检查这些变量是没有意义的,因为攻击者影响它们是微不足道的。一个重要的例外是$_SERVER['remote_addr']直接从 apache 的 TCP 套接字中提取,因此该值不能被欺骗或以其他方式篡改。但是,如果攻击者在同一个网段上(例如,他正在你身后的咖啡馆喝一杯咖啡),那么攻击者将拥有相同的 IP 地址。

于 2010-07-15T17:40:23.673 回答