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