2010-07-15 34 views
3

我使用HTTPS,但希望最小化某人使用最近其他人实际使用的会话ID制造他们自己的cookie的风险。php会话劫持 - HTTPS足够了吗?指纹的建议?

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

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

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

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

所以,我最初想问的是:有没有HTTPS会话的任何“属性”可以使用?他们会有用吗?如果是这样,我如何找到它们? phpinfo()没有显示任何特定的HTTPS。 (是不是因为httpd不公开吗?)

我应该使用HTTP_USER_AGENT + HTTP_ACCEPT串联+ HTTP_ACCEPT_LANGUAGE + HTTP_ACCEPT_ENCODING + HTTP_ACCEPT_CHARSET或类似的东西,被认为是独特足够用户之间?

非常高兴为所有答案! (但是,在回答StackOverflow上的其他问题之前,请阅读该问题) 谢谢!

+1

确保在开始编码之前先完成所有研究。会话安全性是一个众所周知的问题,如果其他人有一个经过深思熟虑和测试的解决方案,我会考虑首先使用它。 – 2010-07-15 15:13:01

+0

@Dan the Sane:你怎么知道对方的代码比你的更好? – symcbean 2010-07-15 15:49:53

+0

@Dan the Sane:我同意。这正是我在这里问的原因。 – MattBianco 2010-07-16 08:33:56

回答

3

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

虽然你提出的应该在手指打印方面应该是相对安全的,但它并不是全部的选择性 - otoh有很多东西不应该用于指纹(比如CLIENT_ADDRESS),所以它并不是很容易推荐更好的东西。

除了我上面的建议,我建议你花时间看看其他潜在的安全问题。

C.

2

OWASP top 10是这个类的攻击的很好的助剂。 Specificlly你需要担心这些三:

A2: Cross-Site Scripting (XSS)

A3: Broken Authentication and Session Management.

A5: Cross-Site Request Forgery (CSRF)(也称为 “会话控制”)

几乎所有的$ _SESSION变量的已知攻击并且可以是任意值。检查这些变量是没有意义的,因为攻击者影响它们是微不足道的。一个重要的例外是$_SERVER['remote_addr'],它直接从apache的TCP套接字中拉出,因此这个值不能被欺骗或者被篡改。但是,如果攻击者位于同一网段(例如他在咖啡馆后面啜饮一杯咖啡),攻击者将拥有相同的IP地址。