首页 > 编程知识 正文

HTTP Referer头部简析及跨站攻击方法防范

时间:2023-11-22 07:24:01 阅读:289786 作者:KZRB

在前端开发中,Referer头部是经常被用到的一部分信息,它记录了一个请求是从哪里发起的。它能够提供一些有用的信息,例如用户从哪个网页链接到了你的页面 , 或者用户从哪个页面发起了POST请求。请让我们来详细探讨一下这个重要的HTTP头部。

一、HTTP Referer头部介绍

HTTP Referer,也常被称为referrer,是由Mozilla网景公司在1996年设计的。

Referer头部记录了请求的来源地址。如果您通过单击链接来浏览您的网站,Referer一般包含链接的URL。如果您使用表单向服务器提交了数据,则会记录REFERER报头表明该请求是从哪个页面发出的。

Referer常被用作Web服务器上的访问控制。

二、HTTP Referer优点

Referer头部在以下几个方面可以为我们提供很有用的信息:

1. 掌握数据传输的来源,方便调试

2. 防止合作站点劫持

3. 在网站分析中,能够及时掌握用户访问情况

4. 支付宝的CPS合作协议似乎也要求引荐方要填写Referer。只有填写正确,交易通过才能当做一个订单进行统计。(CPS:Cost Per Sales,每次销售成本)

三、HTTP Referer的安全风险

1. CSRF攻击(Cross-Site Request Forgery)跨站请求伪造

CSRF是一种基于隐式身份认证的攻击方式,它利用了网站前端的漏洞。攻击者在第三方网站发布一个诱饵诱惑用户浏览该网站,该网页内内嵌有一个发送POST请求的通信API,凭借cookie和referer伪装成受害用户。另一网站内,攻击者与该网站开了一个加密通道,凭借加密凭证,如sessiontoken、privatekey(密钥)得以在用户不知晓的情况下完成骗取数据或者对用户进行恶意操作。

我们可以通过防范没有来源的请求等方法降低CSRF攻击的风险。具体的,对于一个请求,语言框架应该要求Referer头部只能包含合法URL。这些URL应该与请求的源相同。建议服务器管理员采用这种技术来防范CSRF攻击。

2. 隐私泄露

在一些情况下,Referer头部可能会导致个人信息泄漏,因为它可以表示出用户在互联网上的活动轨迹。例如,当一个用户从https网站链接到一个http网站时,Referer头部将包含用户访问https网站的URL。因此,这个问题的解决方案是使用HTTPS,因为HTTPS使用加密传输。

四、HTTP Referer头部的具体实现

在PHP中,可以使用 $_SERVER['HTTP_REFERER']获取Referer头部的内容。

if (strstr($_SERVER['HTTP_REFERER'], "http://www.example.com") === false) {
    die("Referrer invalid.");
}

在结合Apache脚本时,可以使用 SetEnvIfNoCase Referer来对客户端进行访问控制。

SetEnvIfNoCase Referer example.com local_ref
Order deny,allow
Deny from all
Allow from env=local_ref

五、HTTP Referer头部的最佳实践

1.避免包含敏感数据(例如用户密码)的URL传输。

2.启用HTTPS传输。

3.禁用Referer头部的传递。这个做法可能会与网站的一些功能(例如网站访问统计)产生冲突。

4.使用同源的解决方案(例如SameSite cookies)来防范CSRF攻击。

结语

Referer头部是Web开发中的一个重要组成部分,它可以为我们提供很多有用信息。然而,它还可能导致隐私的泄露或成为跨站攻击的一种手段。因此,在编写代码时,需要注意Referer头部的使用方法和安全风险,并正确处理。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。