我正在做一些项目,其中应该是像插件和我的网站核心提供API (访问用户信息等)。但是现在我正在解决一个问题--每个插件都应该有自己的数据库表来存储信息,但是这些表没有一个模板,所以插件必须创建自己的具有自定义结构的表。我在这里有什么问题?
我需要确保每个插件都只能访问它创建的表。这些插件表将位于具有特殊凭据的单独数据库中(因此无法访问“核心”表),但如何避免访问其他插件的表?我的想法如下:
下面是理解我的想法的基本例子:
public function Select($fromTable, $selectWhat, $where) {
$query = "SELECT " . $selectWhat . " FROM {unique_prefix}_" . $fromTable . " where " . $where . ";";
}很简单的例子没有任何输入保护..。我的问题来了--如何保护它以避免访问另一个插件?假设他们不知道彼此的唯一前缀,但仍然如此。或者如何避免将类似于$where的东西传递给1 = 1; evil code here;?当然,这些插件的帐户只具有选择、插入、删除和更新的权限。谢谢你的想法。
发布于 2013-08-12 05:52:14
使用准备好的语句(如with PDO )生成查询,不要让原始输入出现。我不知道您在$where中会有什么,但它仍然是有限的项目数量。因此,可以这样做:对于数组中的每个项,生成PDO语句的一部分。这样,它将生成一个正确的查询,最重要的是,中和所有的“邪恶代码”。
发布于 2013-08-12 07:15:33
不知道这是否是最好的解决方案,但您可以为每个插件创建一个单独的mysql用户,该插件只对该插件的表有授权( grants:http://dev.mysql.com/doc/refman/5.0/en/grant.html)。
您可能希望对每个插件的表强制某种类型的命名约定,并创建一个自动设置关联用户授权的工具。
https://stackoverflow.com/questions/18180148
复制相似问题