預防SQL注入 學習筆記
阿新 • • 發佈:2019-02-02
SQL注入是個老話題,前一段中招了,所以總結了些注意事項,可以快速簡單的幫助防止大部分的注入攻擊
個人覺得引數化和資料庫許可權是相對簡單和有效的方案。
1、Domain Driver Design:
一種設計思想,強調識別可信任和不可信任呼叫,確認安全防範邊界,保證這個邊界範圍內的操作是可靠的,確保不可靠的呼叫都在邊界外。
比如一個登陸操作,可能涉及對字元或密碼合法性驗證,再會有登陸驗證,安全邊界應該放到字元和密碼合法性這層,那麼所有的登陸呼叫操作都應該先合法性驗證,在登陸驗證。
2、引數化語句:
注入是在引數傳入過程,加入特別語句,以改變sql語義,達到攻擊目的。
而引數化是將sql語義與引數分開。這個一般現有的資料庫介面都提供這種訪問方式,比如
程式碼層的引數化
儲存過程層的引數化
HTML5的引數化
3、輸入驗證
對明確有規範或範圍的引數,進行格式化或邊界校驗。
白名單
黑名單
4、NOSQL的注入防範也要注意。
仍然用引數化封裝功能,避免動態字串拼接。
5、資料庫中敏感資訊隱藏
比如表名,user,account等,改成其他的
比如列明:passwd,pwd,password等
平臺方面:
web應用防火牆(ModSecurity)
入侵檢測
錯誤語句告警。
確保資料庫安全:
限制資料庫不必要的功能,
清除預設賬戶
明確資料庫帳戶許可權,控制寫許可權,
最小化api的帳號許可權
web服務
與sql
隱藏錯誤提示
禁用wsdl
快速應對方案
執行時保護
確保資料庫安全
額外的部署