向PHP会话变量添加完整查询?

时间:2014-10-16 21:58:33

标签: php mysql security session-variables

我以前从没想过这样做,也不确定风险。它是每个页面的一次性会话,由访问的下一页替换。

执行以下操作的安全风险是什么?如果有的话?

$_SESSION['somename'] = "SELECT `something` FROM `table` WHERE `something`='blah'";

这是一种安全的方法,如果没有,那么存储一次性查询的更安全的方法是什么?

在temp mysql表中存储查询可能更安全。但我想避免额外的mysql调用。

2 个答案:

答案 0 :(得分:2)

它不应该太危害(见下文),但这是不好的做法。

数据库查询是数据/模型层,会话管理是一个完全不同的主题。你会在keeping those separate中为自己做一件大事。

此外,如果您需要缓存某些内容,则应缓存结果,而不是查询。但是,您可以通过向结果添加标识符来确保结果与用户相关联。

例如,您可以将数据库查询结果存储在Memcached中的数组中,其中数组键将是用户ID。

如果您担心MySQL调用的性能,您应该考虑规范化和正确的索引。

关于潜在危害的一点说明:会话数据存储在文件系统中或(很少)存储在内存中。在共享主机系统上,可能会或可能不会实施阻止其他用户读取会话数据的措施。另一方面,您的PHP源代码也可以以明文形式阅读,并且通常具有相同的权限,因此没有其他攻击向量。如果其他人可以到会话数据,则会引入真正的安全威胁。但我希望在严肃的托管业务的机器上没有这样的设置。

答案 1 :(得分:1)

使用PHP设置变量不是一种安全的方法,因为可能会暴露可能通过SQL注入删除的表名。现在,会话变量存储在服务器上,浏览器无法访问。但是,为什么要引入一个糟糕的习惯,可能会让你的开发团队不那么精明的人使用它来设置cookie呢?然后你有一个很大的问题开始是良性的。最好只将数据放在充当用户标识符的PHP会话变量中。