这个sql代码是否可以安全使用?

时间:2017-02-26 21:09:29

标签: php sql

像我在此代码中使用的那样使用变量作为列名是否安全?

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;
    }
}

2 个答案:

答案 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的值来自何处。如果用户有任何机会与他们有任何关系,那么它就不安全了。