前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >防盗链的原理以及实现

防盗链的原理以及实现

作者头像
程序员小饭
发布2020-09-07 15:35:17
1.5K0
发布2020-09-07 15:35:17
举报
文章被收录于专栏:golang+phpgolang+php

盗链的概念

盗链是指在自己的页面上展示一些并不在自己服务器上的一些内容 获取别人的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容 一般被盗链的都是 图片 音乐 视频 软件等资源 通过盗链的手段可以减轻自己服务器的负担

防盗链的工作原理

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

防盗链的实现方法

Nginx模块,ngx_http_referer_module用于阻挡来源非法域名的请求 nginx指令valid_refers,全局变量$invalid_refer

对资源的防盗链nginx配置为

代码语言:javascript
复制
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配置为

代码语言:javascript
复制
location /images/
{
    valid_referers none blocked test.com *.test.com;
    if($invalid_referer)
    {
        #return 403;
        rewrite ^/ http://www.test.com/403.jpg;
    }

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

可以使用第三方模块HttpAccessKeyModule来解决防盗链的问题,我们需要去安装

安装好有这样一个指令:

accesskey on|off 模块开关

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

accesskey_arg GET参数名称

accesskey_signature 加密规则

代码语言:javascript
复制
location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$
{
    accesskey on;
    accesskey_hashmethod md5;
    accesskey_arg sign;
    accesskey_signature "mypass$remote_addr";
}

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

代码语言:javascript
复制
<?php
$sign = md5('mypass' . $_SERVER['REMOTE_ADDR']);
echo '<img src="./photo.jpg?sign='. $sign .'">';
?>

以上就是防盗链的两种形式,欢迎伙伴们进行ta讨论留言。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 盗链的概念
  • 防盗链的工作原理
  • 防盗链的实现方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档