本文讲述了防盗链的原理和实现方法。
防盗链原理
图片盗链 是指在网页内未经允许直接使用他人网站上的图片资源。
图片服务器在接收到图片资源请求时,会先判断请求源地址是否是授信任的地址,是的话返回图片资源,否则禁止访问或者返回防盗链图片。
具体实现以 baidu 网站为例,发起图片地址请求时会在头部Referer
加上请求源https://www.baidu.com/
,图片服务器通过此字段识别访问来源。如下图:
Referer HTTP 请求头部中的一个字段,包含了请求的来源页面的 URL。通过检查 Referer 头部的值,可以判断请求的来源页面。
防盗链
nginx 配置
server {
listen 80;
server_name your_domain.com; # 你的域名
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
valid_referers none blocked your_domain.com *.your_domain.com; # 允许的域名列表
if ($invalid_referer) {
return 403; # 如果 Referer 无效,返回 403 错误
#rewrite ^/ http://www.xxx.com/403.jpg; # 或者返回防盗链图片
}
# ... 其他配置 ...
}
# ... 其他服务器配置 ...
}
反防盗链
- 网站是
https
协议的,而盗用图片资源是http
协议。则从 https 向 http 发起的请求会因为安全性的规定,而不带 referer,从而实现防盗链的绕过。 - 使用 wsrv.nl : 假设你的图片地址是:https://wsrv.nl/lichtenstein.jpg
# html 中使用
<img src="//wsrv.nl/?url=wsrv.nl/lichtenstein.jpg">
# Markdown 中使用
![](https://wsrv.nl/?url=wsrv.nl/lichtenstein.jpg)
- 使用服务端伪造请求头部