• python3-requests伪造x-forwarded-for以及解决


    通常,我们的服务器会有一级或者多级的反向代理, 因此我们代码中拿remote_addr会取到最后一级反向代理的ip。为了拿到真实ip,常常会去x-Forward-For中拿用户最后一级代理Ip。但是由于该值是header中的, 直接去取可能取到用户伪造的Ip。

    x-forwarded-for资料

    这一HTTP头一般格式如下:

    X-Forwarded-For: client1, proxy1, proxy2

    其中的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。 在上面这个例子中,这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。

     

     

    模拟x-forwarded-for

    import requests
    
    url = 'http://xx.a.com/my'
    
    cookies ={'_ga':'GA1.2.1078940745.1527045185'}
    
    headers = {'X-Forwarded-For':'8.8.8.8', 'content-type':'application/json'}
    
    print(headers)
    
    cookies
    
    req = requests.get(url,headers=headers,cookies=cookies)
    
    print(req.content.decode('utf-8'))

     

     

    postman 中构造

     

        

     

    nginx配置日志格式,方便查看x-forwarded-for字段

       

     

    解决方法:在最外层的反向代理处理。

      1.在最外的反向代理上, 将x-forwarded-for替换为remote_addr

      2.也可以定义另外的Header字段,remote_addr 赋值到该字段上,取该值即可,如x-real-ip。

      3.添加remote_addr 到x-forwarded-for最后,取最后的x-forwarded-for即可。

     

    此时前端反向代理 收到x-forwarded-for为9.9.9.9

     

    后端真实服务器   , 这里能看到 x-forwarded-for 已经不是 9.9.9.9了。 而是真实的xx.xx.xx.239

  • 相关阅读:
    unity配置Android SDK,并构建导出apk格式
    eclipse安装Android插件
    jQuery常用事件详解
    jQuery的DOM操作小案例
    jQuery的DOM操作详解
    jQuery九类选择器详解
    jQuery简单入门
    JS表单前台校验模板
    SSH框架整合(全注解)
    SSH框架整合(XML)
  • 原文地址:https://www.cnblogs.com/thewindkee/p/12873159.html
Copyright © 2020-2023  润新知