SQL Injection的防護是個老課題,但最近卻發現很多新手programmer還是沒搞懂,管理的方式也沒抓到,許多網站在開發時還是漏洞百出,原因大都是架構鬆散,程式人員偷懶的緣故,關於SQL Injection的原理,在此不多敘述,許多文章都有提過,如
如果懂SQL語法的人,都知道,主要是因為沒有擋單引號和--註解符號,及Web server錯誤訊息內容,完美的改善方式應該是用ADO command物件加stored procedure的方式去修改,但須改的地方會相當多,也會花很多時間,
但若自己的網站程式老舊,沒有做防護措施,被hacker亂改資料,想在最短時間上線,要如何應對呢?!
1.關閉服務
先關閉網站對外的服務,但內部可以連結測試,如果有開發機可以測試的公司,可以直接貼公告,告訴客戶系統維護中。
2.搜尋問題
用搜尋檔案資料的方式,找出網站根目錄下所有有下request的程式碼,如果有裝visual studio這類的專案開發工具,可以在開發環境直接尋找。
錯誤的SQL command 通常長的像這樣
userid=request("userid")
pwd=request("pwd")
strSQL="select userid,pwd from tblMember where userid='" & userid & "' and pwd='" & pwd & "'"
或者是
productId=request("productid")
strSQL="select * from tblProduct where productid='" & productid & "'"
3.加入檢驗
將所有request加上過濾單引號的function
function escape(input,slen)
input=left(replace(request("input"),"'","''"),slen)
escape=input
end function
userid=escape(request("userid"),欄位長度)
如果產品序號一定是數值還可以加上數值判斷
4. 改變資料庫存取的帳號及權限
通常SQL injection一開啟,很多資料可能已經透過系統的store procedure外流,因此新增一個帳號,把舊的帳號密碼換掉,新增一個有權限限制只能存取web database的帳號,改變程式碼的connection string,並將沒有用到的database 如 Northwind、 Pub 移除。
5.改寫IIS的錯誤顯示頁
頁面經測試都沒問題後,將IIS HTTP 500 和 400的錯誤頁面改掉,就不會在程式錯誤時把table name 和 SQL語法顯示出來
已上是建議舊網站的快速解決方式,不要花大錢重寫,經濟實惠。
沒有留言:
張貼留言