安全|程式 千萬不要輕視正確配置安全設定的重要性。如果不正確配置安全設定,不但會使您的 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 許可權,則使用者可能無法查看或運行該應用程式。為了防止此類問題,在為您的應用程式分配 NTFS 許可權之前應仔細計劃。
Web 服務器許可權
您可以通過配置您的 Web 服務器的許可權來限制所有使用者查看、運行和操作您的 ASP 頁的方式。不同於 NTFS 許可權提供的控制特定使用者對應用程式檔案和目錄的訪問方式, Web 服務器許可權應用於所有使用者,並且不區分使用者帳號的類型。
對於要運行您的 ASP 應用程式的使用者,在設定 Web 服務器許可權時,必須遵循下列原則:
對包含 .asp 檔案的虛擬目錄允許“讀”或“指令碼”許可權。
對 .asp 檔案和其他包含指令碼的檔案(如 .htm 檔案等)所在的虛目錄允許“讀”和“指令碼”許可權。
對包含 .asp 檔案和其他需要“執行”許可權才能啟動並執行檔案(如 .exe 和 .DLL 檔案等)的虛目錄允許“讀”和“執行”許可權。
有關配置 Web 服務器許可權的詳細資料,請參閱 存取控制。
指令碼對應檔
應用程式的指令碼映射保證了 Web 服務器不會意外地下載 .asp 檔案的原始碼。例如,即使您為包含了某個 .asp 檔案的目錄設定了“讀”許可權,只要該 .asp 檔案隸屬於某個指令碼映射應用程式,那麼您的 Web 服務器就不會將該檔案的原始碼返回給使用者。
Cookie 安全性
ASP 使用 SessionID cookie 跟蹤應用程式訪問或會話期間特定的 網頁瀏覽器的資訊。這就是說,帶有相應的 cookie 的 HTTP 要求被認為是來自同一 網頁瀏覽器。Web 服務器可以使用 SessionID cookies 配置帶有使用者特定會話資訊的 ASP 應用程式。例如,如果您的應用程式是一個允許使用者選擇和購買 CD 唱盤的聯機音樂市集,就可以用 SessionID 跟蹤使用者漫遊整個應用程式時的選擇。
SessionID 能否被駭客猜中?
為了防止電腦駭客猜中 SessionID cookie 並獲得對合法使用者的會話變數的訪問,Web 服務器為每個 SessionID 指派一個隨機組建編號碼。每當使用者的 網頁瀏覽器返回一個 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 服務器僅當禁止匿名訪問或 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 服務器的 Secure Sockets Layer (SSL) 資格映射特性配置正確,那麼伺服器就可以在許可使用者對 ASP 應用程式訪問之前對其身份進行確認。
用於處理資格證明的 ASP 指令碼
作為 ASP 應用程式開發人員,您可以編寫指令碼來檢查資格是否存在並讀取資格欄位。例如,您可以從資格證明中訪問使用者名稱欄位和公司名欄位。Active Server Pages 在 Request 對象的 ClientCertificate 集合中儲存資格資訊。詳細資料,請參閱 ASP 內建對象。
必須將Web伺服器配置為接受或需要客戶資格,然後才能通過 ASP 處理客戶資格;否則,ClientCertificate 集合將為空白。
建立事務性指令碼
商務應用程式常常需要具有在事務內部運行指令碼和組件的能力。事務是一種伺服器操作,即使該操作包括很多步驟(例如,定貨、查看存貨、付帳等),也只能整體返回操作是成功還是失敗。使用者可以建立在事務內部啟動並執行 ASP 指令碼,如果指令碼的任何一部分失敗,整個事務都將會終止。
ASP 交易處理是以 Microsoft? Transaction Server (MTS) 為基礎的。Microsoft? Transaction Server (MTS) 是一個交易處理系統,用於開發、配置和管理高效能、可分級的、有魯棒性的企業 Internet 和 Intranet 伺服器應用程式。Transaction Server 為開發分布式的,基於組件的應用程式提供了一個應用程式設計模型。它也為配置和管理這些應用程式提供了一個運行環境。
建立事務性指令碼的功能內建在 Internet Information Server 和 Personal Web Server 中。如果您安裝了 Microsoft Transaction Server,就可以將組件打包,以使組件在事務內部運行。有關組件打包的詳細資料,請參閱 建立 MTS 包。
關於事務
事務是整體成功或失敗的操作。交易處理用於對資料庫進行可靠地更新。在對資料庫進行許多相關更改或同時更新多個資料庫時,要保證所有更改都被正確執行。如果這些更改中的任何一個失敗,都需要恢複資料庫表的原始狀態。
如果沒有 MTS,您就需要編寫指令碼和組件,手工跟蹤請求的更改情況,以便在某些更改失敗時恢複資料。使用 MTS,您只需簡單的將您的指令碼和組件聲明為“需要事務”並讓 MTS 處理事務的一致性。交易處理只適用於資料庫訪問;MTS 不能對檔案系統或其他的非事務性資源的更改進行恢複操作。應用程式所訪問的資料庫必須為 MTS 所支援。目前,MTS 支援 SQL Server 及任何支援 XA 協議(由 X/Open 協會制定)的伺服器。MTS 將繼續擴充對其他資料庫的支援。
事務不能跨越多個 ASP 頁。如果一個事務需要來自多個組件的對象,則須將使用這些對象的操作組合在一個 ASP 頁中。例如,假定有一個組件用於更新工資單資料庫,還有一個組件用於更新人力資源資料庫中的員工記錄。為了記錄一個員工的新的工資資訊,您需要編寫這樣一個指令碼,該指令碼在一個事務環境中調用這兩個組件,一個用於更新工資單資料庫,