我節錄 MSDN 雜誌【使用 ASP.NET 和 IIS 來建立和部署更安全的網站 -- 第二部分】 ( 英文原文文章 )上的一段話做開頭說明:
表單驗證只能保護 ASP.NET 檔案。我再說一次:表單驗證只能保護 ASP.NET 檔案。它能夠保護 ASPX 檔案、ASMX 檔案與其他 ASP.NET 註冊的檔案類型,但它不會保護不屬於 ASP.NET 的檔案—例如,副檔名是 HTM 或是 HTML 的檔案。如果你想要親自證實這一點,你可以在表單驗證範例中的 Secret 目錄放置一個 ProtectedPage.html 檔案,你必須通過登入網頁才能檢視 ProtectedPage.aspx,但要檢視 ProtectedPage.html 卻不需要登入。為何要這樣?理由是因為如果要求的檔案並沒有在 ASP.NET 註冊,則 ASP.NET 決不會去查看這些檔案 (因此不能攔截和重新導向)。
那要怎樣才能保護 *.htm 的靜態檔案呢?
主要有兩個步驟要做:
-
設定 IIS 的 ScriptMaps 將 *.htm 對應到 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
點選「設定(G)」
點選「新增(D)」並輸入「執行檔」位址與「副檔名」
-
修改 Web.config 的 <system.web> 區段新增一個 httpHandler 指定 *.htm 由 System.Web.StaticFileHandler 來當作靜態網頁處理
<?xml version="1.0"?>
<configuration>
<system.web>
<httpHandlers>
<add path="*.htm" verb="GET,HEAD"
type="System.Web.StaticFileHandler" validate="true" />
</httpHandlers>
</system.web>
</configuration>
做完以上步驟後,所有的 *.htm 檔都會受保護了! :-)