会话变量($ _ SESSION)是否需要任何类型的清理

时间:2014-12-30 18:39:31

标签: php session user-experience

我已经找到了一个没有问题的注册表单,但最近有人向我指出它是用户体验的坏习惯,例如,如果一个帐户已经存在,我重定向用户返回注册页面,无需重新填充他填写的表单,只显示错误消息。

所以我很快想出了一个很好的解决方法,如果在初始注册数据检出并且已经存在相应电子邮件的帐户之后,我可以创建一个存储$ _POST数据的$ _SESSION,并销毁在重新填充用户的表格之后。

现在我的问题是:$ _SESSION变量是否容易受到任何类型的攻击,或者我可以继续将原始输入数据存储在$ _SESSION中,并在重新填充表单时使用htmlspecialchars()将其转义?< / p>

3 个答案:

答案 0 :(得分:2)

会话中的变量不容易受到会话内的攻击。但是,在其他地方使用这些变量可能会打开漏洞。例如,仅仅因为你在会话中放入一个get / post变量并不意味着它可以直接在查询中使用它。它仍然可能导致SQL注入问题。在考虑这样的事情时,你必须考虑数据的来源。如果从某种用户输入启动,请认为它很脏。

唯一可能出现问题的地方是,如果发送的数据非常大,而您只是盲目地分配$_SESSION['POST'] = $_POST;。溢出或类似的东西应该没有问题。问题将是php必须在请求开始时反序列化数据并在结束时重新序列化(通常仅在发生更改时)。这种反序列化/序列化需要时间(可能很快,但仍然如此)。我建议只分配你想要保存的值。

答案 1 :(得分:1)

很难确切地说。但我大约100%肯定答案是不,他们并不是真的很脆弱。假设您几乎可以立即销毁会话。在这种情况下,您将创建会话,将用户重定向回旧页面,检查会话变量,将变量设置在正确的位置(在这种情况下您可以使用纯文本),然后销毁会话。会话只会持续大约10秒......最多一分钟?并且没有人真的有足够的时间从服务器拉出来。如果他们正在听流量,你就会遇到麻烦。

因为时间过长而不得不回答......

您可以在提交之前使用ajax检查用户名。那会更好。如果电子邮件已经存在,请不要让他们提交。只需根据keyup或其他内容提交。

答案 2 :(得分:1)

不,会话变量通过各种选项存储在服务器上,例如保存到磁盘,通过redis或memcached存储共享等等。

即使这些数据受到损害,我也不会真正看到卫生如何保护任何东西或减轻这种攻击的负面影响。

如果你真的担心这样的事情,你可以在使用它之后销毁临时会话变量。