首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP PDO保护数据库名称

问PHP PDO保护数据库名称
EN

Stack Overflow用户
提问于 2019-02-14 19:55:48
回答 1查看 163关注 0票数 1

我知道您不能在预准备语句中使用数据库或表名作为参数。但是,我们的应用程序允许用户在安装过程中指定数据库名称。有没有一种抽象的或者PDO提供的方法来引用这些名字( MySQL的反号,MSSql的方括号等)?

EN

回答 1

Stack Overflow用户

发布于 2019-02-14 20:00:37

在PDO中不能直接转义列名和表名。你可以在这里看到答案:

escaping column name with PDO

在这种情况下,您可以执行一个查询,以便从给定的数据库中获取所有表,如下所示:

代码语言:javascript
复制
SHOW TABLES;

或查询以获取所有数据库,如下所示:

代码语言:javascript
复制
SHOW DATABASES;

然后将其用作用户输入的白名单。当您使用数据库时,明智的做法是排除一些系统数据库,如mysql本身和information_schema。

另一种选择是使用给定的正则表达式过滤用户输入,例如,如果您的表/数据库名称只是带下划线的字符串,则可以使用:

代码语言:javascript
复制
preg_match('/^[a-z_]+$/i', $userGivenTableName)

这应该会删除任何包含SQL注入的潜在字符串。

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

https://stackoverflow.com/questions/54689839

复制
相关文章

相似问题

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