Nginx实现防盗链

盗链:是指在自己的页面上展示一些不在自己服务器上的内容,就是指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 . '" />';
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容