ASP.NET MVC 網站之靜態檔案與 WebForm 授權控制

栏目: ASP.NET · 发布时间: 5年前

内容简介:在 ASP.NET MVC 網站觀察到奇特行為:.css、.js 等靜態檔案可匿名存取,存取 MVC Action 則要登入,有趣的是網站上有個 HttpHandler (.axd) 也能匿名存取。一時之間有點迷惑,花了點時間重現狀況,找出原理解惑。使用 Visual Studio 建立新 ASP.NET 網站專案,啟用 MVC 及 WebForm,在根目錄額外加入 text.txt 靜態文字檔及 WebForm.aspx:

在 ASP.NET MVC 網站觀察到奇特行為:.css、.js 等靜態檔案可匿名存取,存取 MVC Action 則要登入,有趣的是網站上有個 HttpHandler (.axd) 也能匿名存取。

一時之間有點迷惑,花了點時間重現狀況,找出原理解惑。

使用 Visual Studio 建立新 ASP.NET 網站專案,啟用 MVC 及 WebForm,在根目錄額外加入 text.txt 靜態文字檔及 WebForm.aspx:

<%@ Page Language="C#" %>
<script runat="server">
    void Page_Load(object sender, EventArgs e) 
    {
        Response.Write("WebForm");
        Response.End();
    }
</script>

HomeController.cs 的 Index Action 則簡單傳回 MVC 字樣:

using System.Web.Mvc;

namespace AuthTest.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return Content("MVC");
        }
    }
}

另外新增 Models/MyHttpHandler.cs 實作 IHttpHandler:

using System;
using System.Web;

namespace AuthTest.Models
{
    public class MyHttpHandler : IHttpHandler
    {
        #region IHttpHandler Members

        public bool IsReusable
        {
            get { return true; }
        }

        public void ProcessRequest(HttpContext context)
        {
            context.Response.Write("Handler");
            context.Response.End();
        }

        #endregion
    }
}

web.config 掛上 test.axd 設定:

<system.webServer>
<handlers>
  <add name="TestAxd" verb="GET,POST" path="test.axd" type="AuthTest.Models.MyHttpHandler,AuthTest" />
</handlers>
</system.webServer>

實測結果如下圖:

ASP.NET MVC 網站之靜態檔案與 WebForm 授權控制

成功重現 text.txt、WebForm.aspx、test.axd 都可以匿名存取,但 MVC Home/Index 不行。

揭曉達成上述效果的關鍵。

首先,IIS 要同時啟用匿名及 Windows 驗證:

ASP.NET MVC 網站之靜態檔案與 WebForm 授權控制

而專案裡有個 App_Start/FilterConfig.cs 註冊了全域 Filter:(執行時機為 Global.asax.cs Application_Start() 時呼叫 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); )

using System.Web.Mvc;

namespace AuthTest
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new AuthorizeAttribute());
        }
    }
}

註冊 AuthorizeAttribute 後將限定 ASP.NET MVC 需登入才能存取,但其管控範圍並不包含靜態檔案(js、css、png... 等)、WebForm 以及 HttpHandler。引用 Profession ASP.NET MVC 4 一書的 說明 證實此點:

It's important to keep in mind that a global filter applies only to MVC controller actions. It doesn't secure Web Forms, static content, or other ASP.NET handlers.

IAuthorizationFilter 管不到 WebForm,要從 web.config 下手。在 web.config 加上 authorization/deny users="?" 後,curl 下載 WebForm.aspx 與 test.axd 會得到 HTTP 401,但靜態檔 text.txt 仍可匿名存取。

<authorization>
		<deny users="?" />
	</authorization>
  </system.web>

若在 IIS 管理介面停用匿名存取,只留 Windows 整合驗證,則所有存取都會吐回 HTTP 401。

演練完畢,重新釐清觀念,收工。

This article demostrates that AuthorizeAttribute only enable authorization of MVC controllers, but not including static contents, Web Forms, and ASP.NET handdlers.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

企业IT架构转型之道:阿里巴巴中台战略思想与架构实战

企业IT架构转型之道:阿里巴巴中台战略思想与架构实战

钟华 / 机械工业出版社 / 2017-4-1 / 79

在当今整个中国社会都处于互联网转型的浪潮中,不管是政府职能单位、业务规模庞大的央企,还是面临最激烈竞争的零售行业都处于一个重要的转折点,这个转折对企业业务模式带来了冲击,当然也给企业的信息中心部门带来了挑战:如何构建IT系统架构更好地满足互联网时代下企业业务发展的需要。阿里巴巴的共享服务理念以及企业级互联网架构建设的思路,给这些企业带来了不少新的思路,这也是我最终决定写这本书的最主要原因。本书从阿......一起来看看 《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试