首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插件的单独MySQL表

问插件的单独MySQL表
EN

Stack Overflow用户
提问于 2013-08-12 05:34:30
回答 2查看 59关注 0票数 0

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

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

  • 每个插件将有一些独特的表前缀(非公共)。
  • 将有一些类插件,哪里将我的方法选择,插入等。

下面是理解我的想法的基本例子:

代码语言:javascript
复制
public function Select($fromTable, $selectWhat, $where) {
   $query = "SELECT " . $selectWhat . " FROM {unique_prefix}_" . $fromTable . " where " . $where . ";";
}

很简单的例子没有任何输入保护..。我的问题来了--如何保护它以避免访问另一个插件?假设他们不知道彼此的唯一前缀,但仍然如此。或者如何避免将类似于$where的东西传递给1 = 1; evil code here;?当然,这些插件的帐户只具有选择、插入、删除和更新的权限。谢谢你的想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-12 05:52:14

使用准备好的语句(如with PDO )生成查询,不要让原始输入出现。我不知道您在$where中会有什么,但它仍然是有限的项目数量。因此,可以这样做:对于数组中的每个项,生成PDO语句的一部分。这样,它将生成一个正确的查询,最重要的是,中和所有的“邪恶代码”。

PDO准备的报表

票数 1
EN

Stack Overflow用户

发布于 2013-08-12 07:15:33

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18180148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档