图片防盗链(Image Hotlinking Protection)是一种防止未经授权的网站直接链接和显示自己服务器上的图片的技术。其主要原理是通过服务器配置和HTTP请求头信息来控制图片的访问权限,具体包括以下几个方面:
-
HTTP Referer 检查:
当浏览器请求一个资源(如图片)时,会在HTTP请求头中包含Referer字段,这个字段指示了请求资源的来源页面。
服务器可以检查这个Referer字段,如果请求的来源不在允许的域名列表中,服务器可以拒绝请求或返回一个替代的图片(如一个警告图片)。 -
服务器配置:
Apache:可以通过修改.htaccess文件来实现防盗链。例如:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [F,NC,L]
这段代码表示,如果HTTP Referer字段不为空且不包含yourdomain.com,则拒绝对.jpg、.jpeg、.png和.gif文件的访问。
Nginx:可以通过在配置文件中添加如下代码来实现:
location ~* \.(jpg|jpeg|png|gif)$ {
valid_referers none blocked yourdomain.com *.yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
这段代码表示,只有Referer为空、被屏蔽或包含yourdomain.com或其子域名的请求才能访问图片资源,否则返回403错误。
- Token 验证:服务器在生成图片链接时附加一个短期有效的token,客户端请求时需要携带这个token,服务器验证token的有效性。
图片混淆:将图片名称混淆或加密,防止直接猜测图片URL,但这种方法安全性较低。 - CDN:通过内容分发网络(CDN)提供防盗链功能,CDN服务商通常会提供Referer检查、Token验证等功能。