• 高并发大流量专题---2、流量优化(防盗链处理)


    高并发大流量专题---2、流量优化(防盗链处理)

    一、总结

    一句话总结:

    其实把原理用清楚了,剩下就是用点脑子,比如别人Referer防盗链如何解决

    1、盗链概念及相关?

    他人网站资源:盗链是指在自己的页面上展示一些并不在自己服务器上的内容,获得他人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容
    小站盗大站:常见的是小站盗用大站的图片、音乐、视频、软件等资源
    减轻自己服务器的负担:通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器

    2、防盗链概念?

    防盗链:防止别人通过一些技术手段绕过本站的资源展示页面,盗用本站的资源,让绕开本站资源展示页面的资源链接失效

    3、防盗链的工作原理?

    访问网站来源和nginx中我们的配置做对比:通过Referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。一旦检测到来源不是本站即进行阻止或者返回指定的页面

    4、防盗链常用的两种方法?

    检测Referer
    资源签名检测

    5、如何查看请求的来源网站?

    chrome->f12->network->Headers->Request Headers:比如 Referer: https://www.cnblogs.com/

    Request Headers
    Provisional headers are shown
    Referer: https://www.cnblogs.com/
    User-Agent: Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Mobile Safari/537.36

    6、防盗链Referer实现方法 的注意点?

    |||-begin

    Nginx 模块ngx_http_referer_module 用于阻挡来源非法的域名请求
    
    Nginx指令valid_referers,全局变量$invalid_referer
    
    valid_referers none | blocked | server names | string..

    location
    ~* .(jpg|png|gif|jpeg)$ { valid_referers none blocked www.baidu.org *.baidu.org; #有效referers if ($invalid_referer) { #无效referer怎么办 rewrite ^/ http://www.baidu.org/403.html; # 如果有盗链的情况就使用url重写到错误页面或者错误图片 } }

    |||-end

    none:“Referer"来源头部为空的情况
    blocked:“Referer"来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http:/或者https://开头.
    server_names:“Referer"来源头部包含当前的server_names

    7、网站使用referer方式防止盗链,如何破解?

    伪造Referer:伪造成google,百度,或者就是当前网站的referer即可解决

    8、用户使用 伪造Referer 方式来破解 referer方式防盗链, 如何防,及这种方法优缺点?

    可以使用加密签名解决
    加密签名缺点:麻烦:每个资源请求都需要加上签名验证字段:echo '<img src="./1ogo_new.png?sign='.$sign.'">';
    使用第三方模块HttpAccesskeyModule实现Nginx防盗链
    accesskey onloff 模块开关
    accesskey_hashmethod md5 | sha-1签名加密方式
    accesskey_arg GET参数名称
    accesskey_signature 加密规则
    
    nginx中配置
    location ~* .(jpg|png|gif|jpeg)$ {
        accesskey on; #开启accesskey
        accesskey_hashmethod md5; #使用md5加密
        accesskey_arg sign; #资源要带的字段
        accesskey_signature "jason$remote_addr"; #使用md5加密的字段
    }
    表示jason字符串加客户端ip$remote_addr,然后一起md5加密
    
    php端代码
    $sign=md5('jason'.$_SERVERI' REMOTE_ADDR']); 
    echo '<img src="./1ogo_new.png?sign='.$sign.'">';

    9、使用如何加密签名解决防止盗链的原理是什么?

    |||-begin

    使用第三方模块HttpAccesskeyModule实现Nginx防盗链
    accesskey onloff 模块开关
    accesskey_hashmethod md5 | sha-1签名加密方式
    accesskey_arg GET参数名称
    accesskey_signature 加密规则
    
    nginx中配置
    location ~* .(jpg|png|gif|jpeg)$ {
        accesskey on; #开启accesskey
        accesskey_hashmethod md5; #使用md5加密
        accesskey_arg sign; #资源要带的字段
        accesskey_signature "jason$remote_addr"; #使用md5加密的字段
    }
    表示jason字符串加客户端ip$remote_addr,然后一起md5加密
    
    php端代码
    $sign=md5('jason'.$_SERVERI' REMOTE_ADDR']); 
    echo '<img src="./1ogo_new.png?sign='.$sign.'">';

    |||-end

    php端生成的sign字段和nginx端生成的sign字段做对比,如果相同就允许访问,否则不允许

    二、内容在总结中

     
  • 相关阅读:
    表单验证
    obs 之 OBSObj
    rtmp流媒体协议分析(h264、aac)
    lintcode 508.Wiggle Sort
    SVN备份批处理文件
    防火墙没关导致 ORA-12541: TNS: 无监听程序
    [转]window10系统安装oracle11g时遇到INS-13001环境不满足最低要求
    关键驱动因素、约束和浮动因素
    C#之虚函数 非常清晰全面的讲解
    今天有个朋友问我抽象方法和接口的区别,为了解释清楚这个事情,我在网上看到一篇文章讲的非常好给大家分享一下,也感谢原作者的付出
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11046169.html
Copyright © 2020-2023  润新知