|
導(dǎo)讀網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實(shí)現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計(jì)算機(jī)、存儲(chǔ)資源、數(shù)據(jù)... 網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實(shí)現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計(jì)算機(jī)、存儲(chǔ)資源、數(shù)據(jù)資源、信息資源、知識(shí)資源、專家資源、大型數(shù)據(jù)庫、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認(rèn)為是互聯(lián)網(wǎng)發(fā)展的第三階段。 通過互聯(lián)網(wǎng),人們可以做網(wǎng)上交易等各種事情。如何使信息不被竊取、站點(diǎn)不被破壞,就成了網(wǎng)絡(luò)應(yīng)用開發(fā)者、網(wǎng)管員的重要責(zé)任。本文介紹了幾種提高Web站點(diǎn)安全的原則和方法。 一、應(yīng)用環(huán)境 一般來說,提供數(shù)據(jù)庫應(yīng)用服務(wù)的Web站點(diǎn)主要由操作系統(tǒng)服務(wù)器、數(shù)據(jù)庫服務(wù)器和Web服務(wù)器三項(xiàng)構(gòu)成,由此,我們對(duì)Web站點(diǎn)的安全設(shè)置就可以從這三方面入手。基于不同的環(huán)境配置的Web解決方案,其安全考慮各有側(cè)重,但基本的原則是大致相同的。下面我們以基于Windows2000 Advanced Server、Internet信息服務(wù)5.0和SQL Server 2000環(huán)境構(gòu)建Web解決方案為例,討論Web站點(diǎn)的安全問題。此外,由于目前大多數(shù)網(wǎng)站開發(fā)都使用Microsoft的.Net Framework,我們將.Net Framework也考慮進(jìn)去。 二、解決方法 1.Web應(yīng)用程序?qū)影踩? Web應(yīng)用程序?qū)影踩词窃谶M(jìn)行Web應(yīng)用開發(fā)時(shí)應(yīng)該考慮的安全因素,這里包括窗體身份驗(yàn)證、輸入有效性驗(yàn)證、使用參數(shù)化存儲(chǔ)過程、輸出數(shù)據(jù)HTML編碼、信息加密等內(nèi)容。 (1) 窗體身份驗(yàn)證 窗體身份驗(yàn)證即是當(dāng)用戶請(qǐng)求一個(gè)安全頁面時(shí),系統(tǒng)要對(duì)其進(jìn)行判斷,如果該用戶已經(jīng)登錄系統(tǒng)并尚未超時(shí),系統(tǒng)將返回此頁面給請(qǐng)求用戶; 反之如該用戶尚未登錄,系統(tǒng)就要將此用戶重定向到登錄頁面。 以上所述功能的實(shí)現(xiàn)只需對(duì)Web.config文件進(jìn)行如下配置即可。
對(duì)進(jìn)行身份驗(yàn)證的登錄頁本身,應(yīng)該采取兩步方式驗(yàn)證用戶存在且密碼正確,且不可為圖簡便而使用一條SQL語句進(jìn)行驗(yàn)證(如果攻擊者攻破網(wǎng)站,并將SQL語句的where子句末尾加上一段永遠(yuǎn)為真的判斷語句,則無論何時(shí)他都可以通過身份驗(yàn)證)。 存在安全隱患的身份驗(yàn)證語句是:select * from users where name = namestr and password = passwdstr。 比較安全的用戶身份驗(yàn)證應(yīng)該是:判斷用戶是否存在用“select name,password from users where name = namestr”。 如用戶存在,將返回一條包括用戶名和密碼的記錄,然后判斷由數(shù)據(jù)庫返回的密碼和用戶輸入的密碼值: if password = passwdstr { //通過驗(yàn)證后的程序代碼 …… }else{ //未通過驗(yàn)證后的程序代碼 …… } 為加強(qiáng)用戶名、密碼等這些敏感信息在公網(wǎng)上的安全傳輸,應(yīng)通過安全套接字層加密后再返回給Web服務(wù)器。 (2) 輸入有效性驗(yàn)證 輸入有效性驗(yàn)證即是對(duì)所有用戶輸入的字符范圍進(jìn)行限制,以防可用于向Web站點(diǎn)發(fā)送惡意腳本的字符被禁止使用。 通過ASP.NET的System.Text.RegularExpressions.Regex 類提供的功能,用正則表達(dá)式對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,如下所示: Regex isNumber = new Regex(“^[0-9]+$”); if(isNumber.Match(inputData) ) { // 使用它 …… } else { // 丟棄它 …… } 正則表達(dá)式是用于匹配文本模式的字符和語法元素集合,用于確保查詢字符串是正確且無惡意的。 (3) 使用參數(shù)化存儲(chǔ)過程 使用參數(shù)化存儲(chǔ)過程是指在Web應(yīng)用中,盡可能將對(duì)數(shù)據(jù)庫的操作使用存儲(chǔ)過程來完成,而不是動(dòng)態(tài)構(gòu)造SQL語句。 將與數(shù)據(jù)庫的交互限制到存儲(chǔ)過程,這通常是增強(qiáng)Web安全的一個(gè)最佳方案。如果不存在存儲(chǔ)過程,則 SQL 查詢必須由 Web 應(yīng)用程序動(dòng)態(tài)構(gòu)造。如果 Web 層遭到破壞,攻擊者就可以向數(shù)據(jù)庫查詢中插入惡意命令,以檢索、更改或刪除數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù)。使用存儲(chǔ)過程,Web 應(yīng)用程序與數(shù)據(jù)庫的交互操作僅限于通過存儲(chǔ)過程發(fā)送的幾個(gè)特定的嚴(yán)格類型參數(shù)。每當(dāng)開發(fā)人員使用.Net Framework 調(diào)用存儲(chǔ)過程時(shí),系統(tǒng)都會(huì)對(duì)發(fā)送到此存儲(chǔ)過程的參數(shù)進(jìn)行檢查,以確保它們是存儲(chǔ)過程可接受的類型(如整數(shù)、8 個(gè)字符的字符串等)。這是 Web 層有效性驗(yàn)證上的又一個(gè)保護(hù)層,可確保所有輸入數(shù)據(jù)格式正確,且不能自行構(gòu)造為可操作的 SQL 語句。 (4) 輸出數(shù)據(jù)HTML編碼 輸出數(shù)據(jù)HTML編碼是指在將任何數(shù)據(jù)返回給用戶前均應(yīng)采用HTML編碼,以防止跨站點(diǎn)的腳本攻擊。因?yàn)楣粽咭坏┢茐牧藬?shù)據(jù)庫,便可向記錄中輸入腳本,此腳本隨后被返回給用戶并在瀏覽器中執(zhí)行。通過HTML編碼,可將大多數(shù)腳本命令自動(dòng)轉(zhuǎn)換為無害文本。 通過System.Web.HttpServerUtility 類中的 HtmlEncode 方法可實(shí)現(xiàn)HTML編碼,如下所示: SomeLabel.Text = Server.HtmlEncode(username); (5) 信息加密存儲(chǔ) 信息加密存儲(chǔ)是指對(duì)如數(shù)據(jù)庫連接字符串、用戶秘密等敏感信息進(jìn)行加密存儲(chǔ),以妥善保護(hù)數(shù)據(jù)。 數(shù)據(jù)庫連接字符串存放有包括數(shù)據(jù)庫服務(wù)器的位置、數(shù)據(jù)庫名稱和用戶名&密碼等數(shù)據(jù)庫連接信息,攻擊者一旦設(shè)法讀取字符串就可用它來訪問數(shù)據(jù)庫并對(duì)數(shù)據(jù)庫進(jìn)行惡意破壞。通常我們可以采用以下方法保護(hù)加密連接字符串等秘密信息:加密連接字符串,將其存儲(chǔ)在注冊(cè)表中,并使用訪問控制列表(ACL)確保只有系統(tǒng)管理員和ASP.NET輔助進(jìn)程才能訪問注冊(cè)表項(xiàng)。通過使用.Net Framework 的 System.Security.Cryptography 類中的 TripleDES 類提供的功能可實(shí)現(xiàn)對(duì)信息的加密。 2.Internet信息服務(wù)(IIS)層安全 對(duì)IIS進(jìn)行安全配置一般包括如下幾方面內(nèi)容,可最大程度地保障系統(tǒng)安全: (1) 盡可能安裝軟件的最新版本; (2) 盡可能安裝軟件的最新服務(wù)包和修補(bǔ)程序; (3) 將磁盤上的默認(rèn)Web站點(diǎn)位置從c:\inetpub\更改到其他卷,以防止攻擊者通過輸入“..\”作為位置說明輕松訪問C:驅(qū)動(dòng)器; (4) 使用IIS鎖定工具(IIS Lockdown Tool)刪除應(yīng)用程序中未使用的所有其他動(dòng)態(tài)內(nèi)容類型,以減少攻擊者可用來攻擊的區(qū)域; (5) 確保應(yīng)用程序使用低權(quán)限的默認(rèn)本地服務(wù)賬戶(ASP.NET賬戶)運(yùn)行ASP.NET代碼; (6) 將ASP.NET賬戶添加到IIS鎖定工具創(chuàng)建的本地“Web應(yīng)用程序組”,以防進(jìn)程在被偷襲時(shí)運(yùn)行任何未得到授權(quán)的命令行可執(zhí)行程序; (7) 修改Web應(yīng)用程序組權(quán)限,使其可運(yùn)行應(yīng)用程序需要的如.Net Framework C#編譯器和資源轉(zhuǎn)換器(Cse.exe和Cvtres.exe)等資源; (8) 配置URLScan2.5,使其只允許應(yīng)用程序中使用的擴(kuò)展集,并阻止較長的請(qǐng)求(URLScan2.5是由IIS鎖定工具安裝的,是一個(gè)ISAPI過濾器,可根據(jù)查詢長度和字符集等規(guī)則監(jiān)視和過濾發(fā)送到IIS Web服務(wù)器的所有輸入請(qǐng)求); (9) 設(shè)置Web內(nèi)容目錄的訪問權(quán)限,授予ASP.NET進(jìn)程對(duì)內(nèi)容文件的讀訪問權(quán)限,授予匿名用戶對(duì)所提供內(nèi)容的適當(dāng)只讀訪問權(quán)限; (10) 限制對(duì)IIS和URLScan的日志目錄的訪問,只有系統(tǒng)賬戶和系統(tǒng)管理員組才具有訪問權(quán)限。 3.Windows2000 Advanced Server操作系統(tǒng)層安全 為增強(qiáng)操作系統(tǒng)的安全性,應(yīng)盡可能安裝當(dāng)時(shí)發(fā)布的最新服務(wù)包,盡可能關(guān)閉應(yīng)用程序未用到的服務(wù)。下面介紹幾個(gè)注冊(cè)表值。 (1) 創(chuàng)建注冊(cè)表項(xiàng):nolmhash 在 Windows 2000 中,這是一個(gè)關(guān)鍵字,而在 Windows XP 和 Windows Server 2003 中,這是一個(gè)值。 位置:HKLM\System\Current ControlSet\Control\LSA ; 用途:防止操作系統(tǒng)以 LM 散列格式存儲(chǔ)用戶密碼。此格式只用于不支持 NTLM 或 Kerberos 的 Windows 3.11 客戶端。創(chuàng)建和保留此 LM 散列的風(fēng)險(xiǎn)在于,如果攻擊者設(shè)法將以此格式存儲(chǔ)的密碼解密,就可以在網(wǎng)絡(luò)上的其他計(jì)算機(jī)上重復(fù)利用這些密碼。 (2) 創(chuàng)建注冊(cè)表值:NoDefault Exempt 位置:HKLM\System\Current ControlSet\Services\IPSEC ; 用途:默認(rèn)情況下,IPSec 將允許源端口為 88 的傳入通信查詢 IPSec 服務(wù),以獲取連接到計(jì)算機(jī)的信息,而不管使用的是哪種 IPSec 策略。通過設(shè)置此值,除了我們?cè)O(shè)置的 IPSec 過濾器允許的通信以外,不允許端口之間進(jìn)行任何通信。 (3) 創(chuàng)建注冊(cè)表值:Disable IPSource Routing 位置:HKLM\System\ CurrentControlSet\Services\Tcpip \Parameters; 用途:防止 TCP 數(shù)據(jù)包顯式確定到最終目標(biāo)的路由,并防止它要求服務(wù)器確定最佳路由。這是一個(gè)防止“人在中間”攻擊(即攻擊者通過自己的服務(wù)器對(duì)數(shù)據(jù)包進(jìn)行路由,并在數(shù)據(jù)包傳遞期間竊取其中的內(nèi)容)的保護(hù)層。 (4) 創(chuàng)建注冊(cè)表值:Syn Attack Protect 位置:HKLM\System\Current ControlSet\Services\Tcpip\ Parameters ; 用途:此注冊(cè)表項(xiàng)通過限制分配給傳入請(qǐng)求的資源來防止操作系統(tǒng)受到某種 SYN-Flood 的攻擊。換句話說,這將幫助阻止在客戶端和服務(wù)器之間試圖使用 SYN(即同步)請(qǐng)求以拒絕服務(wù)的攻擊。 4.SQL Server2000數(shù)據(jù)庫服務(wù)器層安全 為增強(qiáng)數(shù)據(jù)庫系統(tǒng)的安全性,應(yīng)盡可能滿足以下原則: (1) 將SQL Server安裝在NTFS分區(qū)上; (2) 安裝當(dāng)時(shí)發(fā)布的最新服務(wù)包和修補(bǔ)程序; (3) 限制所支持的身份驗(yàn)證協(xié)議的數(shù)量(在控制面板→管理工具→本地安全設(shè)置→安全設(shè)置→本地策略→安全選項(xiàng)→網(wǎng)絡(luò)安全: LAN Manager身份驗(yàn)證級(jí)別中進(jìn)行設(shè)置); (4)選擇低權(quán)限本地賬戶,啟動(dòng)SQL Server服務(wù); (5) 使用Services MMC 管理單元停止 Distributed Transaction Coordinator (MSDTC) 服務(wù),并將其設(shè)置為手動(dòng)啟動(dòng),以防數(shù)據(jù)庫運(yùn)行失誤,并且服務(wù)器本身也不會(huì)運(yùn)行 COM+ 應(yīng)用程序; (6) 禁用應(yīng)用程序不需要的 SQL Server 代理和 Microsoft 搜索服務(wù); (7) 設(shè)置Server Network的網(wǎng)絡(luò)屬性,由“直接客戶端廣播”改為“隱藏 SQL Server”; (8) 如應(yīng)用程序不使用“命名管道”協(xié)議,則刪除之; (9) 限制數(shù)據(jù)庫用戶只具有用得到的數(shù)據(jù)庫操作權(quán)限。 三、小結(jié) 以上所列出的增強(qiáng)Web解決方案的各種原則和方法,歸納如下: 1. 在原始設(shè)計(jì)中考慮安全問題,這包括開發(fā)工具采用最新的服務(wù)包和修補(bǔ)程序; 2. 總是使用復(fù)雜且不明顯的密碼; 3. 關(guān)閉所有不必要的功能; 4. 堅(jiān)持“最低權(quán)限”原則,決不授予并非絕對(duì)必需的權(quán)限; 5. 使用 IIS 時(shí),運(yùn)行 IIS 鎖定工具和 URLScan; 6. 驗(yàn)證所有輸入數(shù)據(jù); 7. 使用參數(shù)化的存儲(chǔ)過程,而不是在數(shù)據(jù)庫上生成動(dòng)態(tài)查詢。 本文列出的增強(qiáng)Web方案安全性的一般原則和方法,并不一定適用于所有的Web解決方案,只希望能拋磚引玉,引出更多更好的有關(guān)增強(qiáng)Web安全性的建議。
網(wǎng)絡(luò)的神奇作用吸引著越來越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來越嚴(yán)峻的考驗(yàn)―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項(xiàng)技術(shù)都需要適時(shí)應(yīng)勢,對(duì)應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進(jìn)步的催化劑。 |
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!