我想知道是否安全使用表的名称像PHP中的函数参数?

时间:2017-09-06 15:31:27

标签: php mysql phpmyadmin mariadb

class Search{

    `public function query(){`

      `SELECT * FROM $tableName`

    `}`

}
$object = new Search();
$object->query('tableName');//this is good practice? and safty to avoid sql Inyection?

Etc...

2 个答案:

答案 0 :(得分:0)

简短的回答是不,不要这样做。

据说它可能非常安全,具体取决于参数的来源。

考虑将变量映射到表名,因此您可以验证您是仅使用有效的表名构建查询而不是开放式文本。

一个简单的解决方案可能如下所示:

public function query($tableName){
    $allowedTables = ['accounts', 'items', 'products'];

    $table = in_array($tableName, $allowedTables) ? $tableName : null;

    if(empty($table)){
        return false;
    }

    $sql = "Select * FROM " . $table;

    ...
}

答案 1 :(得分:0)

您可以通过“白名单”允许的表格以安全的方式执行此操作。有许多不同的实现取决于您的需求。例如,使用以下命令获取表的完整或过滤列表:

SHOW TABLES; 

BTW,PHP有a function for this。然后检查输入表是否在列表中。

我认为这样做是安全的。