案例1:git
某網站後臺管理平臺測試環境 *********:50052/csop/main.dogithub
在登陸界面用戶名輸入 system' or '1'='1 ,密碼隨意輸入.以後輸入驗證碼,點擊登陸,提示登陸出錯,後訪問上方提供的網址.此時以 system身份登陸系統.即完成一次簡單的SQL注入.數據庫
所謂SQL注入,就是經過把SQL命令插入到提交或輸入或請求的SQL字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意)的SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在輸入(惡意)SQL語句獲得一個執行結果,而不是按照設計者意圖去執行SQL語句。編程
在案例1中,經過惡意的SQL注入,登陸管理員帳號,從而提升本身的權限,後臺執行SQL:服務器
從上述SQL中可能很清楚的看明白注入的SQL在密碼錯誤的狀況下是如何登陸system帳號.cookie
測試角度:使用專業的測試工具,及時發現並處理SQL注入問題框架
從網管角度:記錄網站相關登陸信息,及進發現並跟進SQL注入問題工具
從DBA角度:控制執行SQL帳號權限,按期巡檢,能夠在問題出現時極大的下降損失.post
從開發者角度:性能
使用參數化執行SQL,而不是拼接SQL語句的方式執行SQL.除了有效防止SQL注入外,參數化執行SQL具備執行效率高,性能優秀,等各類優勢.強列建議.
對輸入參數(包括不限於:post請求,get請求,cookie注入,c/s 中客戶端請求,等)進行驗證,
重要的操做採用防護式編程思想在服務端執行,牢記任何客戶端都是不可信任的.
出錯後暴露儘量少的錯誤信息,爲SQL注入製造障礙.(好比500錯誤頁面)
(案例1中SQL注入緣由出在框架搭建者未考濾全面致使的)
其它資料:
阿里的druid對SQL注入有相關防護措施,能夠參考https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter