吳力挽,楊 翀,晏 嵩
(廣州衛(wèi)生職業(yè)技術(shù)學(xué)院,廣東 廣州 510450)
醫(yī)學(xué)檢驗(yàn)專業(yè)教學(xué)資源庫是保障線上教學(xué)的重要工具。線上教學(xué)需要對資源庫開放外網(wǎng)出口,使資源庫的訪問不受時(shí)間和地點(diǎn)限制,更加方便師生開展網(wǎng)絡(luò)教學(xué)。在線網(wǎng)絡(luò)訪問同時(shí)使得資源庫暴露在外網(wǎng),具有遭受多種網(wǎng)絡(luò)攻擊的風(fēng)險(xiǎn)。本文針對目前對醫(yī)學(xué)檢驗(yàn)專業(yè)教學(xué)資源庫網(wǎng)絡(luò)攻擊的常見手段,采用用戶驗(yàn)證、管理會話、數(shù)據(jù)加密、過濾用戶輸入、數(shù)據(jù)訪問等網(wǎng)絡(luò)安全防御技術(shù),保障了醫(yī)學(xué)檢驗(yàn)專業(yè)教學(xué)資源庫網(wǎng)絡(luò)訪問安全,進(jìn)一步增強(qiáng)系統(tǒng)的安全性和可靠性。
系統(tǒng)登陸需要驗(yàn)證用戶的身份,一旦證明身份有效,則授權(quán)用戶訪問資源庫系統(tǒng)中不同的功能模塊。用戶驗(yàn)證主要包括構(gòu)建登錄表單和使用表單驗(yàn)證。建議采用web 表單方法或Http Post 方法,不要使用Http Get 方法。表單驗(yàn)證允許在web.config 文件中配置用戶名和密碼,這些密碼沒有經(jīng)過MD5 或SHA-1 進(jìn)行加密,一旦服務(wù)器被提權(quán),配置文件即可被下載。
在登錄表單上,使用Http Post 方法來傳送用戶證書,必須對用戶表單輸入進(jìn)行驗(yàn)證,以防止SQL 注入和跨站腳本的攻擊。不依賴隱藏的表單字段來傳送敏感數(shù)據(jù)。針對失敗的用戶名或失敗的密碼,使用相同的錯誤消息,不要在錯誤消息中顯示其他任何服務(wù)器信息。
不在資源庫系統(tǒng)部署上使用passwordFormat=“Clear”,正確使用web.config 配置文件,不在配置文件中傳輸明文數(shù)據(jù),要用MD5 進(jìn)行加密處理。要做好Cookie 設(shè)置,以限制對信息劫持的暴露。在配置web.config 文件時(shí),將requireSSL 設(shè)置為true,使得瀏覽器在建立安全的SSL 會話后才傳送Cookie。
阻止暴力攻擊最有效的方法是在不正確輸入密碼若干次后即可鎖定賬號。賬號鎖定時(shí)間可持續(xù)若干小時(shí),也可由系統(tǒng)管理員解鎖。在資源庫系統(tǒng)中,通過采用鎖定賬號的方法可以預(yù)防暴力攻擊。另外,還可以采用密碼驗(yàn)證延時(shí)的方法,延時(shí)可以減緩單線程的攻擊,但對于多個驗(yàn)證請求,延時(shí)不起作用。密碼驗(yàn)證時(shí)的核心算法如下:
資源庫系統(tǒng)通過會話Cookie 來維持會話標(biāo)記,會話標(biāo)記實(shí)現(xiàn)服務(wù)器和客戶端之間的完整交互,維持用戶的優(yōu)先選擇,跟蹤會話變量。
Cookie 是一種用于儲存用戶狀態(tài)以創(chuàng)建和服務(wù)器連接的效果機(jī)制。資源庫系統(tǒng)采用Response.Cookies 集合,Cookie 容易受到攻擊,可以通過設(shè)置Domain(域)、Path(路徑)、Expires(過期時(shí)間)、Secure(安全)、Value(值)來限制這種攻擊。除了提供特定的主機(jī)外,還要檢查接收的Cookie域,如果不檢查將導(dǎo)致會話固定、賬戶跳躍和標(biāo)記操縱。驗(yàn)證Cookie 域的核心算法如下:
視圖狀態(tài)允許頁面在回送給自身時(shí)保持表單屬性,將它們作為編碼字符串存儲在一個隱藏的表單字段中。視圖狀態(tài)的風(fēng)險(xiǎn)是攻擊者能查看或修改這些表單值,實(shí)現(xiàn)各種攻擊。ASP.NET 允許使用加密來保護(hù)視圖狀態(tài)數(shù)據(jù),并用哈希來檢測惡意修改。在資源庫系統(tǒng)中,首先啟用視圖狀態(tài)。為了防止攻擊者操縱視圖狀態(tài),可以在應(yīng)用程序和web 頁面上啟用視圖狀態(tài)驗(yàn)證代碼。保護(hù)視圖狀態(tài)的核心算法如下:
資源庫系統(tǒng)采用session 傳遞用戶信息,session 駐留在內(nèi)存中,瀏覽器不關(guān)閉,session 會話一直保留。如果是在公用計(jì)算機(jī)上,會帶來管理風(fēng)險(xiǎn)。在ASP.NET 采用會話到期時(shí)間,設(shè)置為20 分鐘,20 分鐘后需要重新驗(yàn)證用戶身份。為保障系統(tǒng)安全,在客戶端和服務(wù)器上管理存儲會話狀態(tài),如果只依賴于服務(wù)器,攻擊者更容易接管客戶端會話。如果只在客戶端管理存儲會話狀態(tài),會話固定攻擊更加難以防御。
保持內(nèi)存清潔是一種常見的加密方法,在使用敏感數(shù)據(jù)時(shí),應(yīng)該總是在使用后及時(shí)清除,不要在內(nèi)存中留下未加密的數(shù)據(jù),應(yīng)使用盡可能少的變量,避免緩存普通文本。在資源庫系統(tǒng)中采用Clear()方法清除內(nèi)存中臨時(shí)存儲的變量信息,使用Dispose()即時(shí)釋放內(nèi)存資源。加密算法核心代碼如下:
不良的用戶輸入帶來SQL 注入、目錄遍歷、文件系統(tǒng)訪問、跨站腳本、緩沖溢出等常見威脅。用戶輸入包含各種危險(xiǎn)關(guān)鍵字,在資源庫系統(tǒng)中,采用客戶端和服務(wù)端雙重驗(yàn)證模式,客戶端采用javascript 進(jìn)行字符規(guī)范性驗(yàn)證和格式驗(yàn)證,服務(wù)器端采用數(shù)據(jù)比對驗(yàn)證,同時(shí)在服務(wù)器端通過正則表達(dá)式匹配,過濾掉一些危險(xiǎn)操作動作,確保系統(tǒng)訪問安全。
邊界檢查是快速、簡單阻止應(yīng)用程序攻擊的方法。Request 是表單的輸入源,通過檢查輸入值,可以確定用戶輸入是符合要求的數(shù)據(jù)類型、字符串長度、字符串格式和取值范圍。一是采用驗(yàn)證控件,通過在表單控件上附加一個驗(yàn)證控件,并設(shè)置一些屬性,可以使得ASP.NET 自動檢查用戶輸入值。在資源庫系統(tǒng)中,使用最強(qiáng)大的RegularExpressionValidator,允許復(fù)雜的模式匹配,以保證輸入在特定的合法范圍之內(nèi)。
解決惡意用戶輸入,最有效的方法是采用正則表達(dá)式進(jìn)行模式匹配。在資源庫系統(tǒng)中,不允許單引號進(jìn)行SQL注入攻擊,這里采用正則模式為@"^[a-z0-9s.\]{1,260}$,使用模式匹配后,僅僅允許已知的安全輸入,并且進(jìn)行追蹤式檢查,以保證輸入不包含有害數(shù)據(jù)??梢詫ξ募到y(tǒng)訪問、數(shù)據(jù)庫訪問、電子郵件驗(yàn)證、格式化Html 定義不同的正則表達(dá)式,通過正則表達(dá)式驗(yàn)證確保合法的用戶輸入,減少系統(tǒng)攻擊。
在IIS 中,建議升級到最新的IIS 版本,刪除所有腳本和可執(zhí)行文件的讀取權(quán)限,在web 內(nèi)容文件和目錄上設(shè)置強(qiáng)大的NTFS 權(quán)限,以阻止用戶修改和創(chuàng)建文件。如果不需要web 用戶創(chuàng)建或修改文件,可以考慮將這些文件放置在根目錄之外。對于一些重要數(shù)據(jù)文件,可以使用文件系統(tǒng)設(shè)置只讀屬性,阻止對這些文件輕易修改。
當(dāng)使用數(shù)據(jù)源時(shí),需要進(jìn)行驗(yàn)證和授權(quán)。應(yīng)用程序可以使用兩種方式驗(yàn)證SQL Server 數(shù)據(jù)庫,一是采用Windows 驗(yàn)證,用戶名和密碼無需在連接字符串存儲。二是采用ASP.NET 進(jìn)程身份驗(yàn)證。
SQL 注入可帶來數(shù)據(jù)泄露、數(shù)據(jù)損壞和數(shù)據(jù)銷毀。在資源庫系統(tǒng),采用過濾或轉(zhuǎn)義字符技術(shù)是阻止SQL 注入最常用最有效的方法,一般采用Replace()方法對單引號進(jìn)行過濾,過濾后可以防御常見的'or'='or'注入。
ASP.NET 框架中SqlParameter 可以提供類型和長度檢查,并自動轉(zhuǎn)義用戶輸入。SqlParameter 強(qiáng)制要求類型和類型長度,如果用戶輸入值與描述的類型和大小不一致,代碼將拋出一個異常。
對于用戶輸入的有害數(shù)據(jù),可以拒絕查詢。在資源庫系統(tǒng)中,在用戶查詢數(shù)據(jù)時(shí),檢查用戶輸入的關(guān)鍵字,是否包含drop 或delete 等危險(xiǎn)關(guān)鍵字,如包含這些關(guān)鍵字,則給出錯誤提示。主要核心算法如下:
跨站腳本事件是用戶在訪問瀏覽器時(shí)觸發(fā)了第三方惡意腳本而執(zhí)行的事件,在資源庫中采用編碼技術(shù)進(jìn)行防御,對發(fā)送給瀏覽器的任何數(shù)據(jù)進(jìn)行編碼,給web 頁面指定字符編碼集,強(qiáng)制實(shí)施特定字符集以限制哪些字符對系統(tǒng)有效。另外,對于跨站點(diǎn)請求偽造(CSRF)攻擊防御可以采用以下策略:一是采用Post 方式進(jìn)行數(shù)據(jù)提交;二是采用多步事務(wù),不允許用戶在一步之內(nèi)完成敏感事務(wù);三是檢查HTTP 引用頭,確定表單POST 是否來自自己的頁面;四是禁止用戶提交IMG 標(biāo)簽。
另外一種限制跨站腳本攻擊范圍的方法是在frame或者iframe 元素上設(shè)置安全約束,可以用security 屬性限制安全。
本文采用了用戶驗(yàn)證、管理會話、數(shù)據(jù)加密、過濾用戶輸入、數(shù)據(jù)訪問等web 安全防御技術(shù),進(jìn)一步保障了醫(yī)學(xué)檢驗(yàn)專業(yè)教學(xué)資源庫在線安全訪問。隨著網(wǎng)絡(luò)攻擊手段不斷更新和升級,后續(xù)還需要在阻止暴力攻擊、代碼審查、異常處理、數(shù)據(jù)編碼、語法檢查等方面開展進(jìn)一步研究,并將研究的成果應(yīng)用于醫(yī)學(xué)檢驗(yàn)專業(yè)資源庫在線網(wǎng)絡(luò)教學(xué),進(jìn)一步增強(qiáng)其可靠性和安全性。