我以前从没想过这样做,也不确定风险。它是每个页面的一次性会话,由访问的下一页替换。
执行以下操作的安全风险是什么?如果有的话?
$_SESSION['somename'] = "SELECT `something` FROM `table` WHERE `something`='blah'";
这是一种安全的方法,如果没有,那么存储一次性查询的更安全的方法是什么?
在temp mysql表中存储查询可能更安全。但我想避免额外的mysql调用。
答案 0 :(得分:2)
它不应该太危害(见下文),但这是不好的做法。
数据库查询是数据/模型层,会话管理是一个完全不同的主题。你会在keeping those separate中为自己做一件大事。
此外,如果您需要缓存某些内容,则应缓存结果,而不是查询。但是,您可以通过向结果添加标识符来确保结果与用户相关联。
例如,您可以将数据库查询结果存储在Memcached中的数组中,其中数组键将是用户ID。
如果您担心MySQL调用的性能,您应该考虑规范化和正确的索引。
关于潜在危害的一点说明:会话数据存储在文件系统中或(很少)存储在内存中。在共享主机系统上,可能会或可能不会实施阻止其他用户读取会话数据的措施。另一方面,您的PHP源代码也可以以明文形式阅读,并且通常具有相同的权限,因此没有其他攻击向量。如果其他人可以写到会话数据,则会引入真正的安全威胁。但我希望在严肃的托管业务的机器上没有这样的设置。
答案 1 :(得分:1)
使用PHP设置变量不是一种安全的方法,因为可能会暴露可能通过SQL注入删除的表名。现在,会话变量存储在服务器上,浏览器无法访问。但是,为什么要引入一个糟糕的习惯,可能会让你的开发团队不那么精明的人使用它来设置cookie呢?然后你有一个很大的问题开始是良性的。最好只将数据放在充当用户标识符的PHP会话变量中。