如何从 ASP.NET 的白名单中过滤 UrlReferrer?

Posted

技术标签:

【中文标题】如何从 ASP.NET 的白名单中过滤 UrlReferrer?【英文标题】:How to filter UrlReferrer from a whitelist in ASP.NET? 【发布时间】:2021-10-10 20:00:14 【问题描述】:

我需要创建一个单独的页面,该页面将成为现有 ASP.NET MVC 网站的一部分,该网站只有在来自允许的网站(Referrer)时才能打开或访问。我们的合作伙伴正在计划 使用 iFrame 加载此页面。此页面允许任何用户快速输入详细信息并保存到 我们的数据库。

示例:www.mysecuredwebsite.com/publicpage

由于这将是一个公开的单页,没有登录,唯一的安全是 仅当引荐来源网址在允许的网站列表中时才允许。

例子:

    www.abc.com www.randomwebsite.com www.amazingsite.com

来自任何其他网站的任何请求都将被重定向到错误页面。

解决这个问题的最佳方法是什么?我正在考虑创建一个将使用的自定义属性 装饰控制器,然后读取 来自 app.config 或任何类型配置的允许站点列表。

或者可能来自 SQLDB,因为该站点使用的是 SQLDB?我认为会经常更改的列表 取决于不断增长的客户数量。它应该易于配置并且不需要 重新部署。

有什么想法吗?谢谢!

【问题讨论】:

【参考方案1】:

你可以使用两种方法

方法一:使用ActionFilterAttribute

方法2:Global.asax文件中使用Application_BeginRequest方法。

注意:最好把允许的url放到数据库里,这样方便修改。

我会解释第一种方法

以下过滤器检查是否允许 UrlReferrer。如果它 不允许,会参考错误页面。

添加 UrlReferrerFilterAttribute

using System.Web.Mvc;
using System.Web.Routing;

namespace yournamespace

    public class UrlReferrerFilterAttribute : ActionFilterAttribute
    
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        
            string urlReferrer = string.Empty;
            if (filterContext.HttpContext.Request.UrlReferrer != null)
            
                urlReferrer = filterContext.HttpContext.Request.UrlReferrer.AbsoluteUri;
                if(!db.UrlReferrerTable.Any(a => a.Url == urlReferrer))
                
                    var values = new RouteValueDictionary(new
                    
                        action = "ErrorPage",
                        controller = "Home"
                    );
                    filterContext.Result = new RedirectToRouteResult(values);
                
                
            
            base.OnActionExecuting(filterContext);
        
    

现在使用

[UrlReferrerFilter]
public ActionResult YourAction()

   //..................
   //..................

【讨论】:

以上是关于如何从 ASP.NET 的白名单中过滤 UrlReferrer?的主要内容,如果未能解决你的问题,请参考以下文章

根据白名单表过滤未过滤的表

从 ADF 连接到 Snowflake 的白名单 IP 范围

如何使用千分尺指定我想在spring-boot中使用的指标的白名单

Asp.Net Core 中如何设置 IP 白名单

如何使用千分尺指定我想要在spring-boot中使用的度量标准的白名单

win2008服务器 防火墙如何加ip地址的白名单