【发布时间】:2014-03-07 05:41:07
【问题描述】:
我有两个向数据库添加数据的表单。第一个表单要求提供基本详细信息(姓名、电子邮件、电话等)并存储它们。更进一步,用户可以向他们的帐户添加选项(例如接收时事通讯、接收促销等)
第二种形式使用会话变量来验证用户是谁:当他们登录或注册时,他们的电子邮件地址被设置为会话变量,如下所示:
$_SESSION['buyer_email'] = $_POST['email'];
但是我提交到数据库的所有数据都使用 PDO 在提交之前对其进行清理,所以我的问题是:
上面这行代码可以安全使用吗?它还没有经过这样的消毒,虽然我无法想到任何事情,但他们有什么方法可以操纵这个直接的 POST -> SESSION 吗?
使用 PDO 提交数据,然后从数据库中检索电子邮件并将返回的值设置为会话变量会更好,还是这种做法过大和不必要?
【问题讨论】:
-
最好不要相信用户输入,并在将其设置为会话变量之前检查
$_POST['email']中的电子邮件(格式)是否正确。 -
在任何地方使用放置在会话中的值都是一个问题。规则 #1 - 验证输入,转义输出。
-
所以你说我应该对 post 值做 something (正如我所怀疑的那样!) - 因为我对电子邮件地址做所有正常的事情(例如格式, PDO 的事情,等等。)那么将会话变量从通过检查的值设置到数据库中是否有意义?