关于php:防盗链的原理以及实现

4次阅读

共计 1404 个字符,预计需要花费 4 分钟才能阅读完成。

大家在拜访网站的时候,常常会看到图片展现不进去的时候,如下图

大家有没有想过这是为什么嘛?其实这是一种简略的防盗链的解决,那么盗链是什么呢?为什么须要防呢?咱们明天来一起揭开它神秘的面纱。

盗链的概念

盗链是指在本人的页面上展现一些并不在本人服务器上的一些内容,获取他人的资源地址,绕过他人的资源展现页面,间接在本人的页面上向最终用户提供此内容。个别被盗链的都是图片、音乐、视频、软件等资源。通过盗链的伎俩能够加重本人服务器的累赘

比方我间接在本人的网站上

![](http:www.baidu.com/imagepath/image.png)

这样就能够间接展现百度的图片,然而实际上是无奈展现的 (如下图),之所以无奈展现是因为百度的图片做过防盗链解决

防盗链的工作原理

通过 Refer 或者签名,网站能够检测指标网页拜访的起源网页,如果是资源文件,则能够追踪到显示他的网页地址 一旦检测到起源不是本站,即进行阻止或者返回指定的页面

防盗链的实现办法

Nginx 模块,
ngx_http_referer_module 用于阻挡起源非法域名的申请 nginx 指令 valid_refers,全局变量 $invalid_refer
对资源的防盗链 nginx 配置为

location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$
{
    valid_referers none blocked test.com *.test.com;   // 加 none 的目标是确保浏览器能够间接拜访资源
    if($invalid_referer)
    {
        #return 403;  // 间接返回 403
        rewrite ^/ http://www.test.com/403.jpg;// 返回指定提醒图片
    }
}

对目录的防盗链 nginx 配置为

location /images/
{
    valid_referers none blocked test.com *.test.com;
    if($invalid_referer)
    {
        #return 403;
        rewrite ^/ http://www.test.com/403.jpg;
    }

然而传统的防盗链也会存在一些问题,因为 refer 是能够伪造的,所以能够应用加密签名的形式来解决这个问题。什么是加密签名?就是当咱们申请一个图片的时候,我要给他带一些签名过来,而后返回图片的时候咱们判断下签名是否正确,相当于对一个暗号。

能够应用第三方模块 HttpAccessKeyModule 来解决防盗链的问题,咱们须要去装置。

装置好有这样一个指令:

accesskey on|off 模块开关

accesskey_hashmethod md5 | sha-1 签名加密形式

accesskey_arg GET 参数名称

accesskey_signature 加密规定

location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$
{
    accesskey on;
    accesskey_hashmethod md5;
    accesskey_arg sign;
    accesskey_signature "mypass$remote_addr";
}

意思是 mypass 加客户端 ip 通过 md5 加密 图片文件代码:

<?php
$sign = md5('mypass' . $_SERVER['REMOTE_ADDR']);
echo '![](./photo.jpg?sign=)';
?>

以上就是防盗链的两种模式,欢送搭档们进行探讨留言。

正文完
 0