2017-02-26 47 views
0

像我在这段代码中使用的那样使用变量作为列名是否安全?这个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; 
    } 
} 
+0

具体看'whitelist's那里。 – chris85

+0

那么,已经关闭,但什么地狱:见http://pastebin.com/X9FFq8Yc – cottton

回答

0

这取决于$column的值来自哪里。如果有任何用户与他们有任何关系的机会,那么这是不安全的。

1

在假设$列是从用户的输入,然后我将至少是允许做检索列名的数组列表在你的函数最开始的:

$searchable = array('title','username'); 
if(!in_array($column, $searchable)) { 
    trigger_error('Invalid column name!', E_USER_WARNING); 
    return null; 
}