預防SQL注入

問題:php

如何預防SQL注入?sql

 問題描述數據庫

也許你會說攻擊者要知道數據庫結構的信息才能實施SQL注入攻擊。確實如此,但沒人能保證攻擊者必定拿不到這些信息,一旦他們拿到了,數據庫就存在泄露的危險。若是你在用開放源代碼的軟件包來訪問數據庫,好比論壇程序,攻擊者就很容易獲得相關的代碼。若是這些代碼設計不良的話,風險就更大了。目前Discuz、phpwind、phpcms等這些流行的開源程序都有被SQL注入攻擊的先例。安全

這些攻擊老是發生在安全性不高的代碼上。因此,永遠不要信任外界輸入的數據,特別是來自於用戶的數據,包括選擇框、表單隱藏域和 cookie。就如上面的第一個例子那樣,就算是正常的查詢也有可能形成災難。cookie

SQL注入攻擊的危害這麼大,那麼該如何來防治呢?下面這些建議或許對防治SQL注入有必定的幫助。函數

 

預防SQL注入建議工具

1.嚴格限制Web應用的數據庫的操做權限,給此用戶提供僅僅可以知足其工做的最低權限,從而最大限度的減小 注入攻擊對數據庫的危害。網站

2.檢查輸入的數據是否具備所指望的數據格式,嚴格限制變量的類型,例如使用regexp包進行一些匹配處理, 或者使用strconv包對字符串轉化成其餘基本類型的數據進行判斷。編碼

3.對進入數據庫的特殊字符('"\尖括號&*;等)進行轉義處理,或編碼轉換。Go 的text/template包裏面的 HTMLEscapeString函數能夠對字符串進行轉義處理。spa

4.全部的查詢語句建議使用數據庫提供的參數化查詢接口,參數化的語句使用參數而不是將用戶輸入變量嵌入 到SQL語句中,即不要直接拼接SQL語句。例如使用database/sql裏面的查詢函數Prepare和Query,或者 Exec(query string, args ...interface{})。

5.在應用發佈以前建議使用專業的SQL注入檢測工具進行檢測,以及時修補被發現的SQL注入漏洞。網上有不少 這方面的開源工具,例如sqlmap、SQLninja等。

6.避免網站打印出SQL錯誤信息,好比類型錯誤、字段不匹配等,把代碼裏的SQL語句暴露出來,以防止攻擊者 利用這些錯誤信息進行SQL注入。

 

總結

經過上面的示例咱們能夠知道,SQL注入是危害至關大的安全漏洞。因此對於咱們日常編寫的Web應用,應該對於每個小細節都要很是重視,細節決定命運,生活如此,編寫Web應用也是這樣

 

轉載自 https://www.chaindesk.cn/witbook/17/277

相關文章
相關標籤/搜索