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

版权声明:转载请声明转自http://blog.csdn.net/thewindkee https://blog.csdn.net/thewindkee/article/details/86305837

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

x-forwarded-for资料

 

模拟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

猜你喜欢

转载自blog.csdn.net/thewindkee/article/details/86305837