是否应在登录前或成功登录后创建PHP会话

时间:2009-08-05 13:43:40

标签: php session cookies

如果在登录前创建了PHP会话,则会为每个登录页面请求创建一个会话文件。

问题是如果用户通过脚本向服务器发出多个请求,那么将创建那么多会话文件 如果用户想要攻击服务器,他可以发送异常大量的请求,创建如此多的会话文件占用所有临时空间并使服务不可用。
我不确定这种攻击是否真的可行/可行。

如果在成功登录之前/之后创建了PHP会话,请分享您对此的意见和影响。

4 个答案:

答案 0 :(得分:5)

我认为你误解了session_start()

session_start会发生什么,是的,它会为个人用户创建一个文件。但是下次调用session_start()时,它会为同一个用户使用相同的文件,因为用户的系统上有一个cookie,告诉它使用哪个ID。为了使$ _SESSION数组可用,您必须在每个页面上调用session_start()。

很可能有人可能像你刚才描述的那样掀起一个场景。

实际上,是的,黑客总是可以拥有一个机器人,在每次尝试后清除其cookie,发出10,000个请求,并可能产生磁盘写入问题,但我真的不会太担心它,因为文件很小,比你写的剧本要小得多。您必须编写更多文件(数百万或数十亿的大小)来实际创建问题。

如果你真的想知道你的服务器会有什么影响。编写一个脚本,在目录中创建相当于2段文本的文件。并将其放入10,000个文件的循环中。

如果您担心它会产生的影响,我建议实施一个跟踪器,可以从一个IP地址看到大量的点击进入网站然后暂时禁止IP地址,或者做什么谷歌并且只是为他们提供一个静态验证码页面,不需要很多资源来服务。

所以,回到实际的'问题':

我为访问过我网站的每个用户设置了一个会话,因为我不仅使用会话进行用户身份验证,还用于跟踪我网站上的其他变量。因此,我相信即使他们没有登录也应该设置它。

答案 1 :(得分:1)

如果您担心会话固定攻击,请考虑使用session_regenerate_id()功能。

答案 2 :(得分:0)

运行session_start()后会创建文件。 你可以做的攻击是创建一个机器人来在cookie中发送单独的会话ID,但只需要让它存在。

答案 3 :(得分:0)

真的没关系。您的服务器尽可能便宜,将有足够的空间存储数百万(几乎为空)的会话文件。

最糟糕的是它会减慢存储会话文件的文件夹中的文件访问速度,但是应该监视服务器的磁盘,并且快速填充/ tmp分区应该在某个时刻发出警报。

相关问题