The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

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

我節錄 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 的靜態���案呢?

主要有兩個步驟要做:

  1. 設定 IIS 的 ScriptMaps 將 *.htm 對應到 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll

    點選「設定(G)」



    點選「新增(D)」並輸入「執行檔」位址與「副檔名」


  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 檔都會受保護了! :-)