图片防盗链是为了解决防止图片被其它网站滥用的方法。
在nginx的配置中,可以使用 valid_referers
指令完成图片防盗链的配置。
语法:
valid_referers [none|blocked|server_names] …
在此之前首先说明什么是来路,来路是指访问我们网站的页面的时候得告诉我们您是从哪里来的,是从百度来的呢?还是直接在浏览器中输入地址的呢?这就是来路。
参数它表示有效的来路,其默认值为none,以下解释各个参数的用法:
- none:表示没有referer,一般表示直接在浏览器中输入地址打开图片的。配置了它表示可以直接在浏览器中打开图片而不被阻止。
- blocked:表示有referer但是被防火墙或者是代理给去除了,这些值是不以“http://” 或 “https://” 开头的字符串;
- server_names: 服务器名称,域名列表,也就是白名单。
配置完成valid_referers指令后,会将结果传递给一个 $invalid_referer变量,如果它和上面的其中任意一个条件都匹配则$invalid_referer值为0,否则将被阻止访问。
例子:
location ~ .*\.(gif|jpg|jpeg|png|bmp)$ {
valid_referers none blocked *.yxjc123.com;
if ($invalid_referer) {
return 403;
}
}
当我们在其它的网站引用我们的图片地址的时候。
<img src="https://www.yxjc123.com/uploads/image/202304/20230410155638_54294.png">
效果如下:破解nginx防盗链配置
一般的服务器防盗链都会配置来源为空的情况下是可以打开图片的,即直接在浏览器中输入地址是可以访问的,所以这也是一个bug。
所以我们只需要把图片的属性配置为没有来路即可。
<img referrerPolicy="no-referrer" src="xxx.jpg"/>