2010-03-30 72 views
1

嘿,我正在扫描我的网站以确保安全,并且我注意到非用户可能发送请求和发布信息,因此我决定在所有信息帖子中加入登录检查。我想知道是否为每个用户在会话变量$_SESSION['id']=md5(uniqid());中为md5(uniqid());保留一个会话ID,然后将该会话ID存储在该用户的活动用户下的数据库中是一种好方法。然后,当用户尝试插入信息时,请确认其$ _SESSION ['id']变量等于数据库中用户名等于$ _SESSION ['username']的变量。你对这个家伙有什么想法?提前致谢!关于会话安全性的快速提问

+0

这样做的目的是为了让用户不能在多个地方登录?作为一个用户,我发现这非常讨厌我遇到它的地方。 – 2010-03-30 00:14:09

+0

没有目标是阻止未登录的用户向数据库提交信息 – Scarface 2010-03-30 00:23:58

回答

1

一种解决方案是在用户登录时设置一个名为“loggedin”的会话变量或其他内容,并确保在执行数据库更新时设置变量(在执行SQL调用之前调用session_start(),以及在发送查询之前检查$ _SESSION中的变量)。这样,未登录的用户无法更新数据库,除非他们从已经登录的用户那里窃取了会话。从我所了解的问题来看,这听起来像是最简单的解决方案。

这听起来像是你想出的解决方案已经内置到SESSIONID的PHP会话中。 PHP中的新会话自动生成一个随机字符串,用于标识来自其他会话的会话。不过,我可能会误解。

+0

我很担心人们举起高峰会,所以这就是为什么我认为做id检查可能是个好主意,因为那时我认为黑客很难猜测他们的信息被接受所需的必要ID 。 – Scarface 2010-03-30 00:49:13

+0

防止会话劫持的最佳方法是使用HTTPS通过SSL执行会话。否则,最终用户应该避免被劫持。 – 2010-03-30 00:51:09

+1

对不起,我刚刚看到你对丹故事的评论。 HTTPS使用SSL加密用户和服务器之间的数据传输。如果您已经使用了每个银行网站,则会注意到该URL以HTTPS而不是HTTP开头。这意味着他们拥有一个加密数据传输的SSL证书,以便可能被劫持者无法看到来回的数据,包括cookie和会话。这篇Wiki文章可能会有所帮助:http://en.wikipedia.org/wiki/HTTP_Secure – 2010-03-30 00:54:40

0

我之前在网站上做过这件事,但这不是一种安全措施,而是一种允许用户拥有多个并发会话的功能。真正的关键是在执行需要授权的操作时检查有效的登录令牌,并通过HTTPS运行您的站点以便会话cookie不被劫持。

+0

该检查的主要目的是让未登录的用户无法向数据库提交信息。你能否详细说明登录令牌,以及通过https运行站点的含义,我如何知道我是否是服务器配置?(对不起,我对PHP的安全性有些不熟悉)。 – Scarface 2010-03-30 00:26:24

1

为什么不检查是否设置了$ _SESSION ['username']?

+0

,因为它很容易欺骗 - 他担心非用户发布。 – Val 2010-03-30 06:48:47

+1

@Val whata废话。谁说这很容易欺骗?非用户只是不会有$ _SESSION ['用户名'] varibale集。 – 2010-03-30 07:05:00