2019独角兽企业重金招聘Python工程师标准>>>

现在有一个WEB游戏登录接口,大致就是传递用户名、服务器ID、用户IP、登录时间完成游戏登录信息生成的功能。

链接大约是这样的:

http://sample.com/login.php?user=test&server=s1&userip=127.0.0.1&ts=1380270507&sign=72c361803a5b116e0682581fe958fdee

为了防止伪造请求,这些参数都需要进行签名。签名方式大致是把这些参数拼接起来再加一个KEY进行MD5运算。只要任何一个参数被修改,md5值都会发生改变,签名检查就无法通过。

对于大部分用户来说,这样的登录流程都是没有问题的,但有近期却收到部分用户无法登录游戏的反馈,经过检查服务器日志,发现无法登录的用户都是因为调用接口时签名错误了。在仔细分析发现签名错误的链接确实是合法生成的,并非伪造或者其他恶意攻击,之后再对比各个参数才找到问题原因,URL链接中的IP跟链接生成时的IP不同,被替换掉了,所以造成签名错误。

但分析了好久也没找出IP是被哪里替换掉的,由于从链接生成到用户使用修改后的链接访问服务器之间几乎没有时间差,可以排除用户自己手动替换的可能性,并且IP被替换后会生成无法登录,所以也不太可能是用户自己使用了特别的软件导致这样。在之后分析发现有问题的用户全部是中国移动用户,所以猜测可能是移动的节点服务器搞的鬼,在经过一系列测试发现移动服务器会将URL中的用户IP替换为自己服务器的IP,推测可能是移动服务器内部使用了某种代理导致此种情况。

找到原因了想要解决就很简单了,稍加修改下链接中的用户IP,让移动服务器识别不出来就发了,比如把IP中的”.“替换成"_"(读取时再反向替换回来),这样就不是标准IP格式了,就不会被替换掉了,烦人的签名错误也可以解决了。

示例:

http://sample.com/login.php?user=test&server=s1&userip=127_0_0_1&ts=1380270507&sign=402ab0fc2ca7f898ecac0104302f271b

总结:由于上述情况的存在,在URL链接中直接传递IP有一定风险,可以修改IP格式,先转换成整型或者其他非IP格式,或者改为在POST中请求,可以很好避免被代理服务器意外地替换IP,以致用户无法正常访问或者服务器获得到非期望的用户IP。

原创:http://blog.csdn.net/rainday0310/article/details/12100245

转载于:https://my.oschina.net/miaoyushun/blog/164664

HTTP GET请求URL中IP被异常替换的问题相关推荐

  1. openresty获取nginx请求url中的所有参数

    获取请求url中的所有参数:vi test.lua b传两个值:

  2. SAP Spartacus baseSite 出现在 OCC 请求 url 中

    使用 jerryssr 测试,没有加 urlParameter: 测试效果:url 里没有包含 base site,language 和 currency. 修改 baseSite: 发现 HTTP ...

  3. 使用正则表达式解析http请求url中的参数和参数值

    <html> <script> var test = "#token=Be&access_token=fff&$id_token=ets&ex ...

  4. 正则提取的url中的域名以及替换域名的方法 preg_match()和preg_replace()

    <?php //网站的url$url = 'http://www.baidu.com/index.php';//正则表达式$reg = '/(http):\/\/([^\/]+)/i';preg ...

  5. url中隐藏php后缀,url中如何隐藏.php

    url中隐藏".php"的方法:首先找到并打开"nginx.conf"配置文件:然后添加内容"location / {ttry_files $uri ...

  6. http请求 url传递参数

    参数绑定注解 @PathVariable  URL变量 当使用请求URL中的模板变量样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑 ...

  7. 21世纪开运网www.21kaiyun.com用javascript替换URL中的参数值的技巧

    今天遇到一个需要用javascript将url中的某些参数替换的需求: function parseURL(url) { var a =  document.createElement('a'); a ...

  8. 「Python 编程」编码实现网络请求库中的 URL 解析器

    相信各位 Python 开发者都用过 Requests 库,有些朋友还用过 WebSockets 库.这里回顾一下它们的基本用法,例如使用 Requests 库向目标网站发出 GET 请求: impo ...

  9. CTFHub-SSRF---(Post请求/上传文件/FastCGI/Redis/URL/数字IP/302跳转/DNS重绑定 Bypass)

    目录 一.Post请求 二.上传文件 三.FastCGI协议 四.Redis协议 五.几道IP绕过 1.URL Bypass ​2.数字IP Bypass 3. 302跳转 Bypass 4.DNS重 ...

  10. php批量请求url_php中请求url的五种方法总结

    本文主要给大家介绍了关于php中请求url的五种方法,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 五种方法: 前三种都是php基本的文件操作函数 curl()是php扩展需要开启,l ...

最新文章

  1. 100G 最新技术学习资料大全分享 (2020 年最新)
  2. Win10上线摸鱼神器,已经被玩疯了!
  3. ios android cpu占用率,iPhone-iOS-从应用程序获取CPU使用率
  4. #6284. 数列分块 8 分块
  5. linux path环境变量起什么作用,shell基础(5)PATH环境变量的作用和使用方法
  6. java 类 加载 初始化_java类的加载与初始化
  7. php滚动图代码,JS上下、左右滚动代码(支持图片滚动)
  8. Flink java作为消费者连接虚拟机中的kafka/或本地的kafka,并解决java.net.UnknownHostException报错
  9. Maven - Idea解决Maven下载依赖包速度慢问题
  10. 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
  11. 个人分享:一些学者实用的网站
  12. DOS命令大全:More命令详解
  13. app开发流程:手机软件开发app的6个步骤
  14. 石家庄地铁查询(双人项目)
  15. Prince和学生们2
  16. 1.4 安装Kali Linux
  17. 农业大省吉林谋乡村全面振兴:农业强、农村美、农民富
  18. EL表达式的语法、用法及说明
  19. 京东单品页前端开发那些不得不说的事儿
  20. SQL Server 2008 导出、导入包含数据的脚本 保存脚本法

热门文章

  1. paip.提升用户体验---业务SQL注入漏洞的分析与解决
  2. OCI 完成 TOB 选举,阿里工程师入选全球 9 人名单
  3. QEMU,KVM及QEMU-KVM介绍
  4. Linux基金会宣布成立Ceph基金会
  5. Linux宝库名人轶事栏目 | 我与中国开源软件二十年(二)
  6. 【优化算法】精子群优化算法(SSO)【含Matlab源码 1465期】
  7. SPSS反向题处理(图文+数据集)【SPSS 011期】
  8. dubbo注入找不到bean_Dubbo配置参考手册之dubbo:reference
  9. 深度学习分类pytorch_立即学习AI:02 —使用PyTorch进行分类问题简介
  10. matplotlib——直方图