ASP系列講座(二十)維護ASP 應用程式的安全
作者:Eve Cole
更新時間:2009-05-30 19:58:35
千萬不要輕視正確配置安全設定的重要性。如果不正確配置安全性設置,不但會使您的ASP 應用程式遭受不必要的竄改,而且會妨礙正當使用者存取您的.asp 檔案。
Web 伺服器提供了各種方法來保護您的ASP 應用程式免受未經授權的存取和篡改。在您讀完本主題下的安全資訊後,請花一定的時間仔細檢查您的Windows NT 和Web 伺服器安全性文件。
NTFS 權限您可以透過為單獨的檔案和目錄套用NTFS 存取權限來保護ASP 應用程式檔案。 NTFS 權限是Web 伺服器安全性的基礎,它定義了一個或一組使用者存取檔案和目錄的不同層級。當擁有Windows NT 有效帳號的使用者試圖存取一個有權限限制的檔案時,電腦將檢查檔案的存取控製表(ACL)。此表定義了不同使用者和使用者群組所被賦予的權限。如果使用者的帳號具有開啟檔案的權限,電腦則允許該使用者存取檔案。例如,Web 伺服器上的Web 應用程式的擁有者需要有「更改」權限來查看、更改和刪除應用程式的.asp 檔案。但是,存取該應用程式的公共用戶應僅被授予「唯讀」權限,以便將其限制為只能查看而不能更改應用程式的Web 頁。
維護Global.asa 的安全為了充分保護ASP 應用程序,請務必在應用程式的Global.asa 檔案上為適當的使用者或使用者群組設定NTFS 檔案權限。如果Global.asa 包含向瀏覽器傳回資訊的命令而您沒有保護Global.asa 文件,則資訊將傳回瀏覽器,即便應用程式的其他檔案被保護。
注意 一定要對應用程式的檔案套用統一的NTFS 權限。例如,如果您不小心過度限制了一應用程式需要包含的檔案的NTFS 權限,則使用者可能無法查看或執行該應用程式。為了防止此類問題,在為您的應用程式分配NTFS 權限之前應仔細規劃。
Web 伺服器權限您可以透過設定您的Web 伺服器的權限來限制所有使用者檢視、執行和操作您的ASP 頁的方式。不同於NTFS 權限提供的控制特定使用者對應用程式檔案和目錄的存取方式, Web 伺服器權限套用於所有用戶,且不區分使用者帳號的類型。
對於要執行您的ASP 應用程式的用戶,在設定Web 伺服器權限時,必須遵循下列原則:
對包含.asp 檔案的虛擬目錄允許「讀取」或「腳本」權限。
對.asp 檔案和其他包含腳本的檔案(如.htm 檔案等)所在的虛擬目錄允許「讀取」和「腳本」權限。
對包含.asp 檔案和其他需要「執行」權限才能運行的檔案(如.exe 和.dll 檔案等)的虛擬目錄允許「讀取」和「執行」權限。
腳本映射檔案應用程式的腳本映射保證了Web 伺服器不會意外地下載.asp 檔案的原始程式碼。例如,即使您為包含了某個.asp 檔案的目錄設定了「讀取」權限,只要該.asp 檔案隸屬於某個腳本對應應用程序,那麼您的Web 伺服器就不會將該檔案的原始程式碼傳回給用戶。
Cookie 安全性
ASP 使用SessionID cookie 追蹤應用程式存取或會話期間特定的Web 瀏覽器的資訊。這就是說,帶有相應的cookie 的HTTP 請求被視為來自相同Web 瀏覽器。 Web 伺服器可以使用SessionID cookies 設定帶有使用者特定會話資訊的ASP 應用程式。例如,如果您的應用程式是一個允許用戶選擇和購買CD 唱盤的線上音樂商店,就可以用SessionID 追蹤用戶漫遊整個應用程式時的選擇。
SessionID 能否被駭客猜測?
為了防止電腦駭客猜中SessionID cookie 並獲得對合法使用者的會話變數的訪問,Web 伺服器為每個SessionID 指派一個隨機產生號碼。每當使用者的Web 瀏覽器傳回一個SessionID cookie 時,伺服器取出SessionID 和被賦予的數字,接著檢查是否與儲存在伺服器上的產生號碼一致。若兩個號碼一致,將允許使用者存取會話變數。這項技術的有效性在於被賦予的數字的長度(64 位元),此長度使電腦駭客猜中SessionID 從而竊取使用者的活動會話的可能性幾乎為0。
加密重要的SessionID Cookie
截獲了使用者sessionID cookie 的電腦駭客可以使用此cookie 假冒該使用者。如果ASP 應用程式包含私人訊息,信用卡或銀行帳戶號碼,擁有竊取的cookie 的電腦駭客就可以在應用程式中開始一個活動會話並取得這些資訊。您可以透過對您的Web 伺服器和使用者的瀏覽器間的通訊鏈路加密來防止SessionID cookie 被截獲。
使用驗證機制保護被限制的ASP 內容您可以要求每個試圖存取被限制的ASP 內容的使用者必須要有有效的Windows NT 帳號的使用者名稱和密碼。每當使用者試圖存取被限制的內容時,Web 伺服器將進行身份驗證,即確認使用者身份,以檢查使用者是否擁有有效的Windows NT 帳號。
Web 伺服器支援以下幾種驗證方式:
基本驗證 提示使用者輸入使用者名稱和密碼。
Windows NT 請求/響應式驗證 從使用者的Web 瀏覽器透過加密方式取得使用者識別資訊。
然而,Web 伺服器僅當禁止匿名存取或Windows NT 檔案系統的權限限制匿名存取時才驗證使用者身分。
保護元資料庫存取元資料庫的ASP 腳本需要Web 伺服器所執行的電腦的管理員權限。從遠端電腦上執行這些腳本時,須經已通過身份驗證的連接,例如使用Windows NT 請求/回應驗證方式進行連接。應該為管理等級.asp 檔案建立一個伺服器或目錄並將其目錄安全性驗證方式設定為Windows NT 請求/響應式驗證。目前,僅Microsoft Internet Explorer version 2.0 或更高版本支援Windows NT 請求/響應式驗證。
使用SSL 維護應用程式的安全
Secure Sockets Layer (SSL) 3.0 協定作為Web 伺服器安全特性,提供了一種安全的虛擬透明方式來建立與使用者的加密通訊連線。 SSL 保證了Web 內容的驗證,並能可靠地確認存取被限制的Web 網站的使用者的身分。
透過SSL,您可以要求試圖存取被限制的ASP 應用程式的使用者與您的伺服器建立加密連線;以防使用者與應用程式間交換的重要資訊被截取。
維護包含檔案的安全性如果您從位於沒有保護的虛擬根目錄中的.asp 檔案中包含了位於啟用了SSL 的目錄中的文件,則SSL 將不被應用於被包含檔案。因此,為了確保應用SSL,應確保包含及被包含的檔案都位於啟用了SSL 的目錄中。
客戶資格認證控制對您的ASP 應用程式存取的一種十分安全的方法是要求使用者使用客戶資格登入。客戶資格是包含使用者身分資訊的數位身分證,它的作用與傳統的諸如護照或駕駛執照等身分證明相同。用戶通常從委託的第三方組織獲得客戶資格,第三方組織在發放資格證之前確認用戶的身份資訊。 (通常,這類組織要求姓名、地址、電話號碼及所在組織名稱;此類資訊的詳細程度隨給予的身份等級而異。)
每當使用者試圖登入需要資格驗證的應用程式時,使用者的Web 瀏覽器會自動向伺服器發送使用者資格。如果Web 伺服器的Secure Sockets Layer (SSL) 資格對應特性配置正確,那麼伺服器就可以在授權使用者對ASP 應用程式存取之前對其身分進行確認。
用於處理資格證明的ASP 腳本作為ASP 應用程式開發人員,您可以編寫腳本來檢查資格是否存在並讀取資格欄位。例如,您可以從資格證明中存取使用者名字段和公司名字段。 Active Server Pages 在Request 物件的ClientCertificate 集合中儲存資格資訊。
必須將Web 伺服器設定為接受或需要客戶資格,然後才能透過ASP 處理客戶資格;否則,ClientCertificate 集合將為空。