0

我正在做一些项目,我的网站的插件和核心应该为它们提供 API(访问用户信息等)。但是现在我要解决一个问题——每个插件都应该有自己的数据库表来存储信息,但是这些表没有一个模板,所以插件必须创建自己的具有自定义结构的表。我的问题是什么?

我需要确保每个插件都只能访问它创建的表。这些插件表将位于具有特殊凭据的单独数据库中(因此它无法访问“核心”表),但是如何避免访问其他插件的表?我的想法如下:

  • 每个插件都会有一些唯一的表前缀(非公开)。
  • 将有一些插件类,我将在哪里选择,插入等方法。

这是理解我的想法的基本示例:

public function Select($fromTable, $selectWhat, $where) {
   $query = "SELECT " . $selectWhat . " FROM {unique_prefix}_" . $fromTable . " where " . $where . ";";
}

这是一个没有任何输入保护的非常简单的例子......我的问题来了 - 如何保护它以避免访问其他插件?假设他们不知道彼此的唯一前缀,但仍然。或者如何避免通过类似的$where东西1 = 1; evil code here;?当然,这些插件的帐户将只有 SELECT、INSERT、DELETE 和 UPDATE 的权限。感谢您的想法。

4

2 回答 2

2

不知道这是否是最好的解决方案,但是您可以为每个插件创建一个单独的 mysql 用户,该用户仅对该插件的表具有授权(授权:http ://dev.mysql.com/doc/refman/5.0/en /grant.html)。

您可能希望为每个插件的表强制使用某种类型的命名约定,并创建一个自动为关联用户设置授权的工具。

于 2013-08-12T07:15:33.947 回答
1

使用 PDO 等准备好的语句来生成查询,不要让原始输入出现。我不知道你会在 $where 中拥有什么,但它仍然是数量有限的物品。因此,请执行以下操作:为数组中的每个项目生成 PDO 语句的一部分。这样,它将生成正确的查询,最重要的是,中和所有“邪恶代码”。

PDO 准备好的语句

于 2013-08-12T05:52:14.397 回答