2015-12-31 51 views
1

我想知道如果我仍然應該在這種情況下使用mysqli_real_escape_stringPHP |庫MySQLi:使用..real_escape ..有確切的參數?

我有一個被接受的url參數的集合列表,否則他們被忽略。

if(isset($_GET["data"])) { 
    $data = $_GET["data"]; 
    switch($data) { 
    case "one" : 
     //do x 
     $sql = "SELECT * FROM table WHERE page='".$data."'"; 
    break; 
    case "two" : 
     //do x 
    break; 
    case "three" : 
     //do x 
    break; 
    } 
} 
+0

你不及格,除了已知的字符串來查詢任何東西。你可以安全地避免逃跑。 – bansi

回答

0

在這種情況下,不需要mysqli_real_escape_string。這個功能的目的是「消毒」由用戶輸入的數據。

在,因爲它目前是由用戶編寫的,是的,你正在使用的數據輸入您的代碼,$ _GET [「數據」]可能包含的東西輸入到表格(或類似);但是,因爲你然後使用switch語句來檢查$ _GET [「數據」]你把它串聯到查詢之前,你是一個,還好。然而,如果你決定實現一個「默認情況」,它將$ data連接到一個查詢,而不必先將它與一個你認爲是安全的值進行比較,那麼,是的,你應該清理你的數據。

這裏有消毒用戶輸入一些進一步閱讀:The ultimate clean/secure function