如何从 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中使用的指标的白名单