zoukankan      html  css  js  c++  java
  • HTTP协议头部REFERER用法及伪造

    1》Refere定义 

      Referer是HTTP请求header 的一部分,当浏览器(或者模拟浏览器行为)向web 服务器发送请求的时候,头信息里有包含Referer 。比如我在www.xxxx.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:Referer=https://www.xxxx.com信息

    2>Refere作用

      1.防盗链

        那么可以利用这个来防止盗链了,比如我只允许我自己的网站访问我自己的图片服务器,那我的域名是www.xxx.com,那么图片服务器每次取到Referer来判断一下是不是我自己的域名www.xxxx.com,如果是就继续访问,不是就拦截。  

      2.防止恶意请求。

        比如我的网站上,静态请求是*.html结尾的,动态请求是*.shtml,那么由此可以这么用,所有的*.shtml请求,必须 Referer  为我自己的网站。

        3.空Referer是怎么回事?什么情况下会出现Referer?

         首先,我们对空 Referer  的定义为, Referer  头部的内容为空,或者,一个 HTTP  请求中根本不包含 Referer  头部。

        那么什么时候 HTTP  请求会不包含 Referer  字段呢?根据Referer的定义,它的作用是指示一个请求是从哪里链接过来,那么当一个请求并不是由链接触发产生的,那么自然也就不需要指定这个请求的链接来源。

    比如,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer  字段的,因为这是一个“凭空产生”的 HTTP  请求,并不是从一个地方链接过去的。

          4.那么在防盗链设置中,允许空Referer和不允许空Referer有什么区别?

        允许 Referer  为空,意味着你允许比如浏览器直接访问,就是空。

    3>Refere可靠吗?

      Refere不可靠,但有部分作用,起码增加了爬图难度和成本,因为在浏览器端你是无法指定(伪造),你只能通过定义meta元素告诉浏览器怎么用

    <meta name="referrer" content="never">
    

      content有如下值:

    • 如果 referer-policy 的值为 never:删除 http head 中的 referer;
    • 如果 referer-policy 的值为 default:如果当前页面使用的是 https 协议,而正要加载资源使用的是普通的 http 协议,则将 http header 中额 referer 置为空;
    • 如果 referer-policy 的值 origin:只发送 origin 部分;
    • 如果 referer-policy 的值为 always:不改变 http header 中的 referer 的值;

    4>Refere伪造

       只能在服务器端指定,Refere参数位置在$_SERVER['HTTP_REFERER']

      4.1>CURL方法

    function curl_post($url){
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_REFERER, 'http://www.baidu.com'); 
         $output = curl_exec($ch);
         curl_close($ch);
         return $output;
    }

      4.2》file_get_contents方法

    $opts = array(
      'http'=>array(
        'method'=>"GET",
        'header'=>"Referer: http://www.baidu.com"
      )
    );
    $context = stream_context_create($opts);
    var_dump(file_get_contents('http://www.c.com/api.php', false, $context));
  • 相关阅读:
    笔记-1、线程基础、线程之间的共享和协作
    token的作用及实现原理
    mybatis+oracle如何批量执行多条update
    java程序员应该熟悉的20个有用的库(转)
    js-textarea文本换行符处理,Java后端以及js前端如何处理
    Spket,eclipse下安装Spket插件,格式化js
    关于equals变量 放在前后的问题
    @Autowired和@Qualifier共用出现提示信息Cannot find bean with qualifier XXXXX
    DOM树简单理解学习
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
  • 原文地址:https://www.cnblogs.com/huhu1020387597/p/11479468.html
Copyright © 2011-2022 走看看