SQL注入例子簡單說明--PHP代碼

如果通過網頁需要用戶輸入一些數據信息,並將其插入到MySQL數據庫,這是一個引入SQL注入安全問題的機會。 通常注入是在當要求用戶輸入時,類似他們的姓名,只是一個名字,他們給出,會在不知不覺中包含MySQL的語句會在數據庫運行。永遠不要信任用戶提供的數據,這個過程只有在數據驗證後,作爲一項規則,這是通過模式匹配進行。在下面的例子中,用戶名被限制在字母+數字+字符加下劃線,並在8-20個字符之間的長度 - 可以根據需要修改這些規則。

    if (preg_match("/^w{8,20}$/", $_GET['username'], $matches))  
    {  
       $result = mysql_query("SELECT * FROM users   
                              WHERE username=$matches[0]");  
    }  
     else   
    {  
       echo "username not accepted";  
    }  

若改爲下面這段

    // supposed input  
    $name = "Qadir'; DELETE FROM users;";  
    mysql_query("SELECT * FROM users WHERE username='{$name}'");  

實際SQL變成 | SELECT * FROM users WHERE username=’Qadir’;DELETE FROM users;’ |

   SQL執行 1-》SELECT * FROM users WHERE username='Qadir';

                   2-》DELETE FROM users;

                   3-》', 報錯

3雖然報錯,但是實際執行了1,2語句, 將用戶表中的記錄全部刪除。

該函數調用從表中檢索用戶記錄,其中名稱列匹配由用戶指定的名稱。 在正常情況下,name將只包含字母數字字符,或可能是空格,如字符串ilia。 但在這裏,通過附加一個全新的查詢到$name,在調用數據庫變成災難:注入DELETE查詢刪除所有的用戶記錄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章