聊聊 SQL 注入攻擊

sql注入是一個很基礎的問題,一說大家都好像知道,聽說過,如果再細說說,什麼sql注入攻擊,怎麼sql注入攻擊,sql注入攻擊有什麼危害,十有八九都說不清楚,因此,本篇文章就來聊聊這些問題。

 

什麼是 SQL 注入攻擊?

官方一點的說法是這樣的:

所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域或頁面請求的查詢參數中,最終達到欺騙服務器執行惡意的SQL命令。

簡單來說就是,我們通過表單提交數據(未經過濾的情況下),在後臺都會通過與sql語句拼接來獲取數據,如果提交的數據中包含惡意的sql代碼,那麼在執行sql的時候就騙過了數據庫,執行了惡意的sql代碼,從而達到了一些其他的目的。因此sql注入攻擊也是黑客常用的攻擊手段之一。

這裏舉個登陸的例子,簡單說明一下,當然sql注入的方式有很多,有興趣可自行百度。登陸查詢時,一般的sql是這樣寫的:

select * from sys_user where user_name=? and pwd=?

正常情況呢,如果user_name='gx',pwd='123',執行的sql是select * from user_name='gx' and pwd='123' ,這很好,沒有任何問題。

但是心術不正的人要搞你一下,傳個user_name=‘gx'#’ ,pwd='123',你會發現用戶名錯了,密碼亂輸居然也登陸成功了。

爲什麼呢,其實sql中有兩種註釋,一種是: # ,另一種是:-- ,這條查詢語句正式利用了這個,導致 SQL 認爲後面的語句是註釋。從而,不管你輸入的密碼是否正確,都可以登錄。這個也違背了我們編程的初衷。

sql注入有哪些危害

 

  • 數據庫信息泄漏:數據庫中存放的用戶的隱私信息的泄露。
  • 網頁篡改:通過操作數據庫對特定網頁進行篡改。
  • 網站被掛馬,傳播惡意軟件:修改數據庫一些字段的值,嵌入網馬鏈接,進行掛馬攻擊。
  • 數據庫被惡意操作:數據庫服務器被攻擊,數據庫的系統管理員帳戶被竄改。
  • 服務器被遠程控制,被安裝後門。經由數據庫服務器提供的操作系統支持,讓黑客得以修改或控制操作系統。
  • 破壞硬盤數據,癱瘓全系統

如何防範

防範 SQL 注入攻擊,我在網絡上搜尋了一些方法,僅供參考建議。

  • 把應用服務器的數據庫權限降至最低,儘可能地減少 SQL 注入攻擊帶來的危害
  • 避免網站打印出SQL錯誤信息,比如類型錯誤、字段不匹配等,把代碼裏的SQL語句暴露出來,以防止攻擊者利用這些錯誤信息進行SQL注入。
  • 對進入數據庫的特殊字符('"\尖括號&*;等)進行轉義處理,或編碼轉換。
  • 所有的查詢語句建議使用數據庫提供的參數化查詢接口,參數化的語句使用參數而不是將用戶輸入變量嵌入到SQL語句中,即不要直接拼接SQL語句。
  • 在測試階段,建議使用專門的 SQL 注入檢測工具進行檢測。網上有很多這方面的開源工具,例如sqlmap、SQLninja等。
  • 善用數據庫操作庫,有些庫包可能已經做好了相關的防護,我們只需閱讀其文檔,看是否支持相應的功能即可。

 

就聊這麼多吧,如果面試中問到這方面的問題,基本上是夠用了,當然在開發的過程中,防止sql注入一定得重視起來,安全是第一位的。耐心看完的小夥伴,動動發財手,關注一下我的公衆號唄,我會不定期分享一下技術小乾貨和心得經驗,謝謝嘍

 

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