在PHP中的Session superglobals中存储经过验证的Form数据是否安全?

时间:2014-01-15 15:58:01

标签: php forms session session-variables session-cookies

我有一个非常简单的问题,我问的是因为我不确定答案。我正在构建一个有多步注册表单的应用程序。有7个步骤,每个步骤都在不同的PHP页面上。一旦客户端进入下一页,我也会验证提交的表单数据。

我的问题是: 将所有Validated(仅经过验证的)信息存储在Session变量中是否安全,当他们完成注册时,我会将这些会话值写入数据库。为此目的使用会话是否安全?如果没有,如何利用这种方法?

我也为人们提供了选择,让他们回到每一步,如果错误输入了某些内容,就会更改值。在这种情况下,我只会更新Session变量。它也安全吗?

我目前正在使用session_regenerate_id()来阻止会话窃取。

所以基本上我可以安全地将数据暂时存储在Sessions中,然后将它们插入到数据库中吗?黑客能否在此期间更改会话数据,那么我将在数据库中插入的内容与保存到会话中的内容不同?

我希望你理解我的问题。任何帮助都会得到满足!

2 个答案:

答案 0 :(得分:2)

是的,这是安全的。会话数据存储在服务器端,不能由客户端操纵。客户端唯一拥有的是会话密钥,它允许服务器将客户端与该客户端的存储会话变量进行匹配。只要您在将信息存储到$_SESSION之前验证信息,就可以在流程结束时将会话变量转储到数据库中。

这是more information on sessions and security。解决会话窃取问题的简单方法是使用SSL。

  

我也为人们提供了选择,让他们回到每一步,如果错误输入了某些内容,就会更改值。在这种情况下,我只会更新Session变量。它也安全吗?

只要您重新验证会话变量,您也可以使用此方法。

答案 1 :(得分:0)

如果您保护会话ID以进行会话窃取然后继续,会话是存储在服务器端的安全变量,每个客户端都有自己的会话,所以如果您确定保持会话ID安全,那么没问题