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));
  • 相关阅读:
    delphi提示:File not Found:DockForm.dcu的解决办法
    Delphi7 从资源文件中载入GDI+对象
    蛙蛙推荐:在c#使用IOCP(完成端口)的简单示例
    倡议:大家做一个.net开源的灾难管理系统
    蛙蛙推荐:c#使用winsock api实现同步Socket服务端
    蛙蛙推荐:用winsock和iocp api打造一个echo server
    讨论:零拷贝和环形队列缓存队列问题
    蛙蛙推荐:利用Excel进行销售量预测
    临时放段c++代码,关于IOCP的,让群里朋友看
    蛙蛙推荐:蛙蛙教你索引邮件
  • 原文地址:https://www.cnblogs.com/huhu1020387597/p/11479468.html
Copyright © 2011-2022 走看看