共用方式為


Web 應用程式安全性威脅概觀

更新:2007 年 11 月

如果任何其他不知名的使用者可以存取您的 Web 應用程式,那麼惡意使用者嘗試取得應用程式未經授權之存取權的可能性,便相當的高。可以在網際網路上可公開存取的伺服器,也是經常被惡意使用者探測是否有任何安全性的弱點。因此,建議您對所有 Web 應用程式採取預防措施並且進行適當的安全性建置。

如需撰寫安全程式碼和保護應用程式安全性之最佳作法的詳細資訊,請參閱 Michael Howard 和 David LeBlanc 所著的《撰寫安全的程式碼》(英文),或者查閱 Microsoft 典範與實例所提供的指南。

安全性技術只是方案的一部分

實作安全性只是方案的一部分,另一個重點便是隨時保持警戒,即使系統已建置多種安全性保護措施,仍然需要透過下列幾種方式密切注意:

  • 監視系統的事件記錄檔。留意不斷要求登入系統的嘗試,或是對 Web 伺服器所做的過度要求。

  • 隨時進行 Microsoft Windows 和網際網路資訊服務 (IIS) 的安全性更新,並且更新 Microsoft SQL Server 或是應用程式可能會使用的其他資料來源,讓應用程式伺服器保持在最新狀態。

將威脅模型化

開發更安全應用程式的要點之一在於認識對應用程式的可能威脅;Microsoft 已開發可將威脅分類的方法:欺騙、竄改、否認、資訊洩露、拒絕服務、提高權限 (STRIDE)。以下章節會簡要說明這些威脅,以及這些威脅入侵 Web 應用程式的方法。

欺騙

「欺騙」(Spoofing) 是指以未授權的方式模擬使用者或處理序。欺騙最簡單的方法就是輸入不同使用者的憑證。惡意使用者可能也會變更 Cookie 的內容,偽裝成另一名使用者,或是假裝 Cookie 來自不同的伺服器。

一般而言,您可以使用嚴格驗證 (Authentication) 避免發生假冒身分。只要有人要求存取非公用資訊時,即需確認他們的身分。將認證資訊存放在安全的地方,有助於防範發生任何欺騙的行為。例如,不要將密碼或其他機密資訊放在 Cookie 中,讓惡意使用者可在其中輕易找到並進行修改。

竄改

「竄改」(Tampering) 的意思是未經授權變更或刪除資源。其中一項範例是毀壞網頁,惡意使用者進入您的網站並變更檔案。竄改的間接方法是「指令碼攻擊」(Script Exploit)。惡意使用者能夠取得要執行的程式碼 (指令碼),方法是將其偽裝成頁面的使用者輸入或連結。

防範竄改的主要措施是使用 Windows 安全性鎖定檔案、目錄和其他 Windows 資源,此外,也應該以最小權限執行應用程式。只要不信任來自任一使用者甚至是資料庫的所有資訊,即可防止指令碼遭到入侵。只要從未受信任的來源取得資訊,一定要確認它不含任何可執行的程式碼。

否認

「否認」(Repudiation) 的威脅在於交易中含有主體時,以未經證實的方法執行交易。在 Web 應用程式中,這可能表示模擬無辜使用者的認證。您可以使用嚴格驗證方式,防範否認性攻擊。此外,使用 Windows 的登入功能,將伺服器上任何活動的稽核記錄保留下來。

資訊洩露

「資訊洩露」(Information Disclosure) 表示竊取或洩露原本應該是私用的資訊。最常見的範例是竊取密碼,但也可能涉及對伺服器上任何檔案或資源的存取。

對於資訊洩露的最佳防範措施就是沒有可洩露的資訊。例如,如果不儲存密碼,惡意使用者就無法竊取另一個儲存密碼的替代方式是只儲存密碼的雜湊,當使用者出示認證時,可將使用者密碼製作雜湊,並只比較兩者的雜湊。如果要儲存敏感性資訊,請使用 Windows 安全性確保敏感性資訊的安全。當然,您還應該使用驗證,確保只有經過授權的使用者能夠存取受限制的資訊。如果必須公開敏感性資訊,建議您在儲存時加密該資訊,並在瀏覽器之間傳送資訊時使用 Secure Sockets Layer (SSL) 加密資訊。

拒絕服務

「拒絕服務」(Denial of Service) 攻擊是故意造成應用程式的可用性降低,使其無法達到其應有的水準。常見的範例是造成 Web 應用程式的超載,該它無法正常的提供使用者服務。也有可能是,惡意使用者嘗試損毀您的伺服器。

IIS 可讓您「壓制」(Throttle) 應用程式,限制應用程式可以對要求提供服務的數目;您也可以拒絕已知為惡意的使用者或 IP 位址的存取。如果要應用程式保持在連線狀況,則必須執行相當穩固的程式碼。您應該徹底測試應用程式,在可行的範圍內適當地回應錯誤狀況。

提高權限

「提高權限」(Elevation of Privilege) 攻擊是指使用惡意的手段,取得超出一般所指派的權限。例如,如果提高權限攻擊成功,惡意使用者就可以取得 Web 伺服器的系統管理權限、任意存取伺服器上的資料,並控制伺服器的功能。

若要協助防範提高權限的攻擊,可行的話,以最小的權限內容執行應用程式。例如,建議您不要以系統 (系統管理員) 使用者的身分執行 ASP.NET 應用程式。

請參閱

其他資源

保護 ASP.NET 網站