產品經理必備IT技術知識之“什麼是SQL注入攻擊?”

不少優秀的產品經理都會寫一些簡單的SQL語句進行數據查詢的操作,但是會寫SQL語句不代表能寫好SQL語句。SQL語句寫得不好,就會引發SQL注入攻擊。SQL注入攻擊是Web開發中最常見的一種安全問題,惡意攻擊者可以利用它獲取數據庫中的敏感信息、篡改數據,甚至可以獲得系統的控制權限。產生SQL注入漏洞的原因也很簡單:開發者

沒有對用戶提交的內容進行審核,導致惡意 SQL 語句被執行。

產品經理必備IT技術知識之“什麼是SQL注入攻擊?”

我們來看一個簡單的例子。假設有一個登錄系統,用戶在登錄時提交了用戶名和密碼,如果通過用戶名和密碼能從後臺數據庫中找到某個用戶,就算登錄成功。根據這個例子可以寫出這樣的偽代碼:

產品經理必備IT技術知識之“什麼是SQL注入攻擊?”

可以看出,這個SQL語句會將查詢語句和用戶提交的數據拼接起來。如果提交的用戶名是guoguo,密碼是passwd123,這個SQL語句就是:

產品經理必備IT技術知識之“什麼是SQL注入攻擊?”

這裡就有點蹊蹺了。我們先看前面那個SQL語句:賬號和密碼兩個條件必須匹配上,才會返回用戶guoguo的信息,否則查詢不到任何結果。再來看第二個SQL語句。要知道,“--”在SQL語句中是註釋符號,它後面的語句都將被視為無效,那麼這個SQL真正有效的部分是:

SELECT * FROM user_table WHERE username='guoguo'

它的含義是“找出用戶名是guoguo的用戶”。這樣黑客完全不需要知道密碼,就能拿到guoguo的用戶信息,繼而登錄賬戶。這也是互聯網發展早期大家口口相傳的“萬能密碼”。

產品經理必備IT技術知識之“什麼是SQL注入攻擊?”

這種通過在提交的數據里加入SQL代碼巧妙地改變後臺SQL執行邏輯的攻擊方式,就是SQL注入攻擊。如何防範SQL注入攻擊呢?其實也很簡單,在這個例子中,我們將用戶輸入的用戶名和密碼進行校驗,只允許字母和數字出現,那麼“guoguo'--”中的“'--”會被

視為非法輸入而拒絕執行SQL,這個攻擊就起不到任何作用了。

當然,只允許使用字母和數字這個規則過於粗暴,會誤傷一些真正有效的輸入。我們在實踐中使用的是更復雜、也更精細的過濾規則。只需要記住一個原則:永遠不要相信外界輸入的數據,對任何外界輸入的數據都要做合法性的校驗。


分享到:


相關文章: