﻿# 如何讓 ASP.NET 的表單驗證功能保護 .htm 的檔案

我節錄 MSDN 雜誌【[使用 ASP.NET 和 IIS 來建立和部署更安全的網站 -- 第二部分](https://learn.microsoft.com/en-us/archive/msdn-magazine/2002/may/asp-net-security-an-introductory-guide-to-building-and-deploying-more-secure-sites-with-asp-net-and-iis-part-2 "使用 ASP.NET 和 IIS 來建立和部署更安全的網站 -- 第二部分 (另開視窗)")】 ( [英文原文文章](http://msdn.microsoft.com/zh-tw/magazine/cc301387\(en-us\).aspx) )上的一段話做開頭說明：

> **表單驗證只能保護 ASP.NET 檔案**。我再說一次：表單驗證只能保護 ASP.NET 檔案。它能夠保護 ASPX 檔案、ASMX 檔案與其他 ASP.NET 註冊的檔案類型，但它**不會保護不屬於 ASP.NET 的檔案—例如，副檔名是 HTM 或是 HTML 的檔案**。如果你想要親自證實這一點，你可以在表單驗證範例中的 Secret 目錄放置一個 ProtectedPage.html 檔案，你必須通過登入網頁才能檢視 ProtectedPage.aspx，但要檢視 ProtectedPage.html 卻不需要登入。為何要這樣？**理由是因為如果要求的檔案並沒有在 ASP.NET 註冊，則 ASP.NET 決不會去查看這些檔案 (因此不能攔截和重新導向)。**

那要怎樣才能保護 \*.htm 的靜態檔案呢？

主要有兩個步驟要做：

1.  設定 IIS 的 ScriptMaps 將 \*.htm 對應到 C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet\_isapi.dll  
      
    **點選「設定(G)」  
    **![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7480f56199c88f052371-IIS-Default-MainDir.gif)  
      
      
    **點選「新增(D)」並輸入「執行檔」位址與「副檔名」**  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/795ca4997a1f1d6a01c3-Screenshot_-_2007-11-01______03_05_11.png)  
      
    
2.  修改 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 檔都會受保護了！ :-)
