WEB應用暴露在公網上,時刻都會面臨著各種各樣的攻擊,而SQL攻擊也是最為常見且危害很大的。
SQL注入其實就是利用不嚴謹的SQL查詢方法和語言來構造具有危害性的SQL語句,數據庫一旦執行了這些SQL,黑客的目的就能達到了。像以前最為常見的SQL注入就是:' or 1='1 類似這種的SQL構造。
考慮到數據庫類型不同,SQL操作上也是有一定區別的,但對于SQL注入防御手段而言還是有一些共同方案的,結合我的開發經驗總結出一些方案供大家參考:
1、用戶所有的輸入數據務必做校驗
“永遠不要相信用戶的輸入”,所以在WEB應用中,但凡是用戶提交的數據我們都要進行合法性校驗,另外要做必要的數據類型轉換和過濾,比如通常我們會將用戶輸入的單號引、雙引號等字符做一個轉換,防止其直接傳遞到SQL語句中。
2、SQL預編譯
開發人員在處理查詢時,不要采取拼接SQL這種方式來處理,建議使用預編譯SQL,參數使用占位符來替換。
3、服務器關閉錯誤回顯
線上服務器可以關閉具體的錯誤回顯,不要將具體的錯誤信息暴露給攻擊者(如果暴露這些錯誤信息會被黑客利用),所以通常我們都是做個友好的錯誤頁來作為出錯時的提示頁。
像一些WEB容器、語言/腳本/框架的版本信息也要隱藏或者偽造一個。
4、服務器對GET、POST數據進行處理
比如我們通過Nginx來對用戶的GET、POST數據進行一個校驗,如果包含某些危險字符(比如SQL關鍵字、特殊字符等),則直接拒絕請求。
5、數據庫層面上嚴格控制權限
不同應用使用不同的帳號來操作數據庫,不能使用超級帳戶來操作數據庫,另外不同業務分配不同的數據庫帳號,比如:只讀權限、只寫權限等,另外像DROP這類操作就不允許執行了。
另外數據庫端口禁止外網訪問。
以上就是防止SQL注入的一些方案,如果大家有不同看法,歡迎在下方評論區發表自己的觀點 ~ 我是科技領域創作者,十年互聯網從業經驗,我了解更多科技知識!