[英]Is PHP SESSION safe in website for inserting MySql data
我有一个网站,如果登录成功,我会创建一个UserID的会话。
$email = mysql_real_escape_string($_POST["email"]);
if(LOGIN SUCCESSFUL) {
$_SESSION['userID'] = $email;
}
然后在我将任何数据输入MySql的整个站点中,我从$_SESSION['userID']
插入user_id
我不知道它有多安全,如果没有,请告诉我任何安全的方法来做这一切。
它没有任何根本性的错误 - 正如Barmar所说,你在$_SESSION
存储的任何东西都是合理安全的。 但是,在内部使用用户的电子邮件作为主ID,并将用户ID直接存储在$_SESSION
,在架构上不是一个好主意。
更常见的方法是更抽象:在$_SESSION
仅存储会话ID。
该ID通常指向“会话”数据库表。 该表中的每个会话都有一条记录,其状态 - 创建时间,超时时间,用户是否登录等。
理论上你可以将所有这些直接存储在$_SESSION
但是你没有中心位置,你可以看到谁当前登录,这对于故障排除很重要,并立即注销所有人。
“sessions”表将包含一个用户ID,该用户ID指向单独的“users”表。 该ID理想情况下是一个数字自动增量值,而电子邮件只是users表中的一列。 即使电子邮件发生变化,这也允许与其他表的关系保持不变。 使用该ID,您可以从该表中获取电子邮件地址。
它更复杂但在边缘情况下可以省去很多麻烦,例如当用户更改其电子邮件地址时。
会话数据相当安全。 它保存在服务器上,而不是客户端上。 客户端唯一拥有的是会话ID字符串,它是服务器用于在其文件中查找会话数据的随机字符串。
在数据库中插入任何内容时,请确保它是安全的。 你已经在使用mysql_real_escape_string()
,这是一个很好的开始,因为它可以防止大多数常见的SQL注入问题(尽管不是全部!)。
由于您期望使用电子邮件地址,因此使用filter_var()
也是明智之举,因为它允许您检查它是否实际上是有效地址。
if (filter_var($email, FILTER_VALIDATE_EMAIL))
{
// Email is valid, do something with it.
}
一旦确定它是安全的,您可以在任何您喜欢的数据库中使用它。 您不再需要为每个查询转义它,因为您已经确保它是安全的。 如果你真的想要安全,请使用用户ID(而不是他们的电子邮件),因为数字值几乎不可能放入垃圾邮件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.