|
使用用戶提供的數(shù)據(jù)進(jìn)行數(shù)據(jù)庫查詢的任何應(yīng)用程序是SQL注入攻擊的一個潛在目標(biāo)。數(shù)據(jù)庫管理員可能無法完全阻止針對其數(shù)據(jù)庫服務(wù)器的SQL注入式攻擊;但是,管理員們和應(yīng)用程序開發(fā)人員可以做一些事情,將這些攻擊的影響最小化。
數(shù)據(jù)庫管理員可以做什么?
不要讓數(shù)據(jù)庫和Web服務(wù)器放在同一臺計算機(jī)上
使用防火墻或不可路由的IP地址來阻止到數(shù)據(jù)庫的互聯(lián)網(wǎng)訪問。一旦配置完畢,來自數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)包將不能被轉(zhuǎn)發(fā)到互聯(lián)網(wǎng)。在Web服務(wù)器上需要添加一條路由,這樣才能找到數(shù)據(jù)庫服務(wù)器。
配置可信任的IP接入和訪問(例如,IPSEC),以控制哪些機(jī)器能夠與數(shù)據(jù)庫服務(wù)器通信。
從數(shù)據(jù)庫服務(wù)器上移除所有的示例腳本和應(yīng)用程序。
為每一個應(yīng)用程序的數(shù)據(jù)庫連接賬戶使用一個專用的低特權(quán)賬戶。不要使用sa、dba、admin。
不要準(zhǔn)許用戶或應(yīng)用程序直接訪問數(shù)據(jù)庫表。要使用對數(shù)據(jù)庫擁有有限訪問的應(yīng)用程序角色。如果應(yīng)用程序僅需要讀取訪問,就要將數(shù)據(jù)庫的訪問限制為只讀。
從生產(chǎn)數(shù)據(jù)庫中移除未用的存儲過程。
將對應(yīng)用程序的訪問僅授權(quán)給用戶創(chuàng)建的存儲過程。
不要將應(yīng)用程序的“_ANY_”授權(quán)給操作系統(tǒng)命令或系統(tǒng)存儲過程。
應(yīng)用程序的設(shè)計人員可以做什么?
程序設(shè)計人員肩負(fù)著保障Web應(yīng)用程序安全的重要責(zé)任。在設(shè)計和編碼階段加強(qiáng)安全審察才是杜絕程序漏洞的關(guān)鍵。大體而言,程序設(shè)計者至少應(yīng)當(dāng)實施下面的一些措施:
要創(chuàng)建應(yīng)用程序要生成的特定的通用錯誤消息。因為,在一次SQL注入攻擊期間,通過數(shù)據(jù)庫生成的默認(rèn)的錯誤消息,攻擊者可以獲取有價值的信息,如表格和欄的名稱。
在將用戶服務(wù)的輸入提交給數(shù)據(jù)庫之前,驗證用戶輸入的合法性。僅接受所期望的用戶輸入,并限制其長度。注意,只要可能,使用白名單列表檢查所有的用戶輸入。應(yīng)用程序服務(wù)器防火墻可被用于檢查所有的輸入,并僅接受那些符合標(biāo)準(zhǔn)的輸入。
在程序開發(fā)期間,使用Web應(yīng)用程序掃描工具發(fā)現(xiàn)代碼中漏洞。
將Web應(yīng)用程序與SQL數(shù)據(jù)庫隔離開來,將應(yīng)用程序所要求的所有SQL放置在數(shù)據(jù)庫服務(wù)器上。
使用靜態(tài)查詢。如果需要動態(tài)查詢,就使用準(zhǔn)備好的語句。
使用一個安全的接口,如ADO的Command Object,使應(yīng)用程序執(zhí)行存儲過程。
檢測SQL注入漏洞和攻擊
要檢測易于受攻擊的應(yīng)用程序并不是簡單事情,因為這些漏洞可能存在于面向用戶的任何應(yīng)用程序接口中。雖然并非所有的SQL注入攻擊技術(shù)都易于檢測,但數(shù)據(jù)庫管理員或開發(fā)人員可以做以下的事情:
閱讀Web服務(wù)器的日志。有時,在這些日志中就可輕易地發(fā)現(xiàn)SQL注入攻擊,因為這時寫往日志的登錄項目要比平常多得多。
查找HTTP 404和HTTP 500錯誤日志項目,以及程序生成的檢查用戶輸入的其它的錯誤日志項目。
使用Web應(yīng)用程序掃描工具。這些工具可被用于警告數(shù)據(jù)庫管理員,告知管理員應(yīng)用程序中易受SQL注入攻擊的地方。
在部署應(yīng)用程序之前,檢查其中的SQL注入因素至關(guān)重要。
總之,一個防御SQL注入攻擊的穩(wěn)健方案應(yīng)是在開發(fā)、部署、管理、維護(hù)的多個方面都進(jìn)行檢查,并且需要安全管理人員不斷地注意SQL注入的最新動向,采用切實可行的工具,使程序的漏洞最小化。
|
【收藏】【打印】【進(jìn)入論壇】 |
|
|
|
|
|
|
|