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