碰到的问题
网页中添加了其他网站上的图片链接,这个图片设置了防盗链的图片后,访问报403
防盗链基本实现说明
主要是通过验证referer
中记录的接口请求来源来验证网站有没有权限访问该图片资源,如果没权限在则返回403
无权限访问
分析
经排查测试,发现一般大多数网站中图片的防盗链都是只屏蔽了不在白名单中的referer
,但是没有屏蔽referer
为空的请求
解决办法
在网页的<head>
标签中添加<meta name="referrer" content="no-referrer"/>
,意思是设置从此页面发出的请求(包括请求图片等资源文件)不设置referer
请求来源
Referrer简介
Referrer
网站来路,访问者进入网站任何途径。HTTP Referer
是header
的一部分,当浏览器向web服务器发出请求的时候,一般会带上Referer
,告诉服务器用户从那个页面连接过来的,服务器藉此可以获得一些信息用语处理。
作用
判断网站来源,可以相应的做一些校验,比如只允许某网站的请求,那么就可以通过获取referer
,加以判断即可。
可设置的参数
参数 | 说明 |
---|---|
空字符串 | 按照浏览器的默认值执行。默认值为 no-referrer-when-downgrade 。部分标签可重定义此安全策略 |
no-referrer |
不传递 Referrer 报头的值 |
no-referrer-when-downgrade |
当发生降级(比如从 https:// 跳转到 http:// )时,不传递 Referrer 报头。但是反过来的话不受影响。通常也会当作浏览器的默认安全策略 |
same-origin |
同源,即当协议、域名和端口(如果有一方指定的话)都相同,才会传递 Referrer
|
origin |
将当前页面过滤掉参数及路径部分,仅将协议、域名和端口(如果有的话)当作 Referrer
|
strict-origin |
类似于 origin ,但是不能降级。 |
origin-when-cross-origin |
跨域时(协议、域名和端口只有一个不同)和 origin 模式相同,否则 Referrer 还是传递当前页的全路径。 |
strict-origin-when-cross-origin |
与 origin-when-cross-origin 类似,但不能降级。 |
unsafe-url |
任意情况下,都发送当前页的全部地址到 Referrer ,最宽松和不安全的策略。 |