盗链:是指在自己的页面上展示一些不在自己服务器上的内容,就是指B网站将A网站中的一些资源的链接地址贴到B网站中。
常常是一些小网站来盗取一些大网站的地址(比如音乐、图片、视频、软件等资源)然后放置在自己的网站中。
防盗链:防止别人通过技术手段绕过本站的资源展示页面,盗用本站的资源,让绕开本站资源展示页的资源链接失效,减轻服务器负担
以下是nginx的实现方式:
ngx_http_referer_module模块
location ~ .*\.(jpg|jpeg|gif|png|swf)$
{
# valid_referers这个关键字定义了白名单, none代表请求头中没有referer信息, blocked代表被防火墙过滤标记过的请求
valid_referers none blocked *.source.com source.com;
# invalid_referer是内置变量,判断上一行中的valid_referers值会返回0或者1,
if ($invalid_referer) {
# return 403;
rewrite ^/ http://www.source.com/403.jpg;
}
}
这种方式可以通过伪造伪造Referer信息来绕过,可以使用加密签名解决,
使用第三方模块HttpAccessKeyModule实现,实现方式:
location ~ .*\.(jpg|jpeg|gif|png|swf)$
{
# accesskey为模块开关
accessKey on;
# 加密方式MD5或者SHA-1
accesskey_hashmethod md5;
# accesskey_arg为url中的关键字参数
accesskey_arg "key";
# accesskey_signature为加密值,此处为test和访问IP构成的字符串。
accesskey_signature "test$remote_addr";
}
php页面使用:
<?php
// md5 (test.ip)
$sign = md5('test' . $_SERVER['REMOTE_ADDR']);
echo '<img src="./img.png?sign=' . $sign . '" />';