PHP PDO保护数据库名称

时间:2019-02-14 11:55:48

标签: php pdo

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

1 个答案:

答案 0 :(得分:0)

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

escaping column name with PDO

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

SHOW TABLES;

或查询以获取所有像这样的数据库:

SHOW DATABASES;

然后将其用作用户输入的白名单。 使用数据库时,最好排除一些系统数据库,例如mysql本身和information_schema

其他选项是使用给定的正则表达式过滤用户输入,例如,如果表/数据库名称仅是带下划线的字符串,则可以使用:

preg_match('/^[a-z_]+$/i', $userGivenTableName)

这应该删除所有包含SQL注入的潜在字符串。