像我在此代码中使用的那样使用变量作为列名是否安全?
public function SelectForum($column, $value) {
global $database;
$database->query('SELECT * FROM forums WHERE '.$column.' = :value');
$database->Bind(":value", $value);
$database->execute();
$ForumsData = $database->resultset();
$ForumsCount = $database->RowCount();
if($ForumsCount == 0) {
return null;
} else {
return $ForumsData;
}
}
答案 0 :(得分:1)
假设$ column来自用户输入,那么我至少会在函数的最开始处创建一个允许的可搜索列名称的数组列表:
$searchable = array('title','username');
if(!in_array($column, $searchable)) {
trigger_error('Invalid column name!', E_USER_WARNING);
return null;
}
答案 1 :(得分:0)
取决于$column
的值来自何处。如果用户有任何机会与他们有任何关系,那么它就不安全了。