将 Table 名称作为参数发送是否安全
Is it Safe to Send a Table Name in as Parameter
我是 PDO 新手,正在创建 class。我想让代码尽可能干净,尽可能少一些页面。我计划将列和 table 名称作为参数发送:
function get($column, $table, $where) {
global $db;
$query = 'SELECT '.$column.' FROM '.$table.' WHERE '.$where.'';
try {
$statement = $db->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$statement->closeCursor();
return $result;
} catch (PDOException $e) {
$error_message = $e->getMessage();
display_db_error($error_message);
}
}
它工作正常,但我想知道它的安全性如何。
您的代码不安全。除非您在代码中的其他地方测试 $column、$table 和 $where,否则 sql 注入的时机已经成熟。我不会做你打算做的事。这是导致疯狂错误和错误的途径。允许用户控制访问什么 table 显然是您的应用程序设计中的一个主要缺陷。
我是 PDO 新手,正在创建 class。我想让代码尽可能干净,尽可能少一些页面。我计划将列和 table 名称作为参数发送:
function get($column, $table, $where) {
global $db;
$query = 'SELECT '.$column.' FROM '.$table.' WHERE '.$where.'';
try {
$statement = $db->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$statement->closeCursor();
return $result;
} catch (PDOException $e) {
$error_message = $e->getMessage();
display_db_error($error_message);
}
}
它工作正常,但我想知道它的安全性如何。
您的代码不安全。除非您在代码中的其他地方测试 $column、$table 和 $where,否则 sql 注入的时机已经成熟。我不会做你打算做的事。这是导致疯狂错误和错误的途径。允许用户控制访问什么 table 显然是您的应用程序设计中的一个主要缺陷。