2017-04-23 130 views
0

我正在學習mysql,它涉及的主題之一是處理用戶輸入時的安全問題 - 一個問題是注入攻擊。我試圖複製本書演示的攻擊,如添加查詢$query = "select * from temp_table; drop table temp_table,我使用了mysqli_query($connection,$query)。什麼都沒發生。我改爲使用mysqli_multi_query()並發現它執行了兩個語句。最後我發現mysqli_query每次只運行一個查詢。SQL注入攻擊 - 使用mysqli_multi_query()

我的問題是,如果我用mysqli_query,從理論上講,系統不應該擔心額外的語句注入攻擊嗎?或者,即使服務器正在使用mysqli_query,用戶仍然可以運行其他任何方式?

感謝您的幫助和建議!

+0

「系統不應該擔心額外的語句注入攻擊?」 ---這是正確的。這就是關於「小桌子」的漫畫是烏托邦式的原因。 – zerkms

+0

請閱讀此答案:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php –

+0

非常感謝你! :) – ming

回答

1

的確,基本mysqli_query()只會運行一個語句。因此,您不必擔心SQL注入攻擊會欺騙您的應用程序運行多個語句。

但是一條語句可以包含子查詢或SELECT... UNION SELECT...

一條語句可以讀取它不打算讀取的數據。或者造成一種意圖將服務器壓制成拒絕服務攻擊的巨大排序。或者它可能只是一個錯誤,而不是惡意攻擊。

SELECT * FROM Users WHERE last_name = 'O'Reilly'; -- woops! 

SQL注入的解決方案非常簡單,易於遵循。我不明白爲什麼這麼多開發人員會尋找不要編寫安全代碼的藉口。

+0

謝謝!得到它了! :) – ming

+0

當你的語句是select * from用戶,其中loginID ='blah'和password ='blah''並且用戶輸入'blah'或者1 = 1'時,你也可以創建問題 –