HttpReferrer验证

本文介绍了一个自定义的ASP.NET MVC属性,用于确保表单提交来自同一站点,以增加安全性。通过检查请求的referrer,如果提交不是来自localhost,则抛出HttpException。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Chapter7
{
    public class IsPostedFromThisSiteAttribute:AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext!=null)
            {
                if (filterContext.HttpContext.Request.UrlReferrer==null)
                {
                    throw new System.Web.HttpException("Invalid submission");
                }

                if (filterContext.HttpContext.Request.UrlReferrer.Host!="localhost")
                {
                    throw new System.Web.HttpException("This form wasnot submitted from this site");
                }
            }
            //base.OnAuthorization(filterContext);
        }
    }
}

### HTTP Referrer Policy: No-Referrer 行为与使用 当 `no-referrer` 的策略被应用时,无论请求的触发方式如何(例如通过链接点击、重定向或资源加载),都不会向目标站点发送任何引用地址信息。这意味着即使是从 HTTPS 页面发起到另一个 HTTPS 页面的请求,也不会传递 `Referer` 头部字段[^1]。 #### 使用场景 `no-referrer` 策略通常用于保护用户的隐私,尤其是在跨域请求的情况下。它能够防止敏感信息泄露给第三方网站,因为这些信息可能包含在原始页面的 URL 中。例如,在银行登录页面上有一个指向外部新闻文章的链接;如果采用默认行为,则可能会将带有会话 ID 或其他参数的完整 URL 泄露出去。而启用此策略可以有效阻止这种情况发生[^3]。 #### 实现方法 可以通过 HTML 元标签或者响应头来设置该政策: ##### 方法一:HTML Meta Tag 设置 ```html <meta name="referrer" content="no-referrer"> ``` ##### 方法二:服务器端配置 - 响应头部 对于 Apache 和 Nginx 这样的 Web 服务程序来说,可以在其配置文件里加入如下指令以实现全局控制: - **Apache**: Add the following line to your .htaccess file or main configuration. ``` Header always set Referrer-Policy "no-referrer" ``` - **Nginx**: Include this directive within an appropriate context such as http, server, location block etc. ``` add_header Referrer-Policy "no-referrer"; ``` 值得注意的是,并非所有的浏览器都完全支持上述两种设定中的每一个选项。根据最新的统计数据表明,除了 Opera Mini 之外的主要现代浏览器都已经实现了不同程度的支持程度。 #### 技术细节补充 尽管设置了 no-referrer 政策,但在某些特殊情况下仍需注意缓存机制的影响以及代理验证过程中的交互规则。比如当涉及到 Cache-Control headers 定义时(`cache-directive`) ,或者是处理来自远程服务器的身份认证挑战(challenge) 请求时 (`Proxy-Authenticate`) 都有可能间接影响最终效果 [^2][^4]. ### 结论 综上所述,“No-Referrer” 是一种简单有效的手段用来增强网络浏览安全性并减少不必要的数据暴露风险。然而开发者也应当考虑到不同环境下的兼容性和潜在副作用从而做出合理的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值