Referer防盗链是一种基于HTTP请求头中Referer字段的访问控制机制,Referer字段是HTTP请求头的一部分,它携带了HTTP请求的来源地址信息(协议+域名+查询参数),可用于识别请求的来源,通过配置Referer黑白名单,CDN可以根据这些名单识别请求身份,从而允许或拒绝访问请求,如果请求被拒绝,CDN会返回403响应码,表明访问被拒绝。
服务器端检查每个请求的Referer字段,如果Referer字段不是来自白名单配置,就拒绝提供服务,从而节省带宽和服务器资源,CDN的Referer请求规则如下:
如果浏览器携带的Referer与黑名单Referer匹配,或与白名单Referer不匹配,则CDN将拒绝该请求的访问。
如果浏览器携带的Referer与白名单Referer匹配,则CDN将允许该请求的访问。
以阿里云CDN为例,配置Referer防盗链的步骤如下:
1、登录CDN控制台。
2、在左侧导航栏,单击“域名管理”。
3、在域名管理页面,找到目标域名,单击操作列的“管理”。
4、在指定域名的左侧导航栏,单击“访问控制”。
5、在Referer防盗链页签,单击“修改配置”。
6、根据业务需求,填写Referer配置项。
7、单击“确定”,完成配置。
参数 | 说明 |
Referer类型 | 黑名单:携带黑名单Referer的请求均无法访问当前资源。 白名单:只有携带白名单Referer的请求才能访问当前资源。 说明:黑名单和白名单互斥,只能选择一种。 |
规则 | 支持添加多个Referer名单,使用回车符分隔。 支持星号()作为通配符,匹配所有子域名,如.example.com匹配example.com的所有子域名。 支持通配符()缺省,匹配自身及其所有子域名,如example.com匹配example.com和.example.com结果集。 说明:Referer防盗链规则的总长度最长不超过60KB,配置规则不需要填写协议头。 |
重定向URL | 请求被拦截后返回302+Location头,该项为Location头的值,必须以http://或者https://开头,http://www.example.com。 |
高级配置 | 允许通过浏览器地址栏直接访问资源URL:默认未勾选,勾选后,无论配置的是Referer黑名单还是白名单,系统不拦截空Referer请求,CDN节点允许用户访问当前资源。 空Referer包括:用户请求中不携带Referer头,Referer头值为空。 |
精确匹配 | 默认未勾选,勾选后,不再支持通配符()缺省,若未使用通配符,example.com仅匹配example.com。 |
忽略scheme | 未勾选忽略scheme时,请求头中Referer必须携带HTTP或HTTPS协议头。 勾选忽略scheme后,请求头中Referer可不携带HTTP或HTTPS协议头。 |
问题一:Referer防盗链配置后,是否会影响正常用户的访问?
解答:Referer防盗链配置后,理论上不会影响正常用户的访问,只要用户请求中的Referer字段符合CDN配置的白名单规则,即可正常访问资源,但如果用户请求中的Referer字段不符合规则(如来自黑名单域名或未携带Referer头),则会被CDN拒绝访问并返回403状态码,在配置Referer防盗链时,需要确保正确设置白名单和黑名单,以避免误拦正常用户的访问。
问题二:Referer防盗链能否完全防止资源被盗用?
解答:Referer防盗链虽然能在一定程度上防止资源被盗用,但并不能完全杜绝,破解可能通过伪造Referer字段来绕过防盗链限制;如果网站存在其他安全破绽(如XSS破绽、CSRF破绽等),破解也可能利用这些破绽获取资源,除了配置Referer防盗链外,还需要采取其他安全措施来保护网站资源,如加强服务器安全防护、定期更新软件补丁、进行安全审计等。