2017-02-26 45 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; 
}