项目背景: 近期在做一款app测试,为保护用户隐私,客户端对请求进行整体加密后再发送,途径加密墙服务器进行解密,再发送给指定服务器,逻辑简图如下:
测试过程:
以上这些操作都需要针对该功能的明文请求进行操作,但客户端发出来的加密请求,我们无法解密,阻碍了测试进行,怎么办呢?
解决问题: 我们平时测试明文请求时,只需要给客户端连接fiddler代理就可以对请求进行操作处理了,那么我们是不是可以给加密墙服务器配置fiddler呢?在开发大佬帮助下,给出了如下方案:
目的: 在加密墙服务器和目标服务器之间搭设fiddler,通过该fiddler进行数据查询、修改等操作; 操作步骤:
我们这里主要讨论下步骤b中的操作 Fiddler修改请求有两种方法: 1、 在fiddler命令行输入:
urlreplace xxxx.com xxxx.com/jiemi?ip=a&port=b
2、 在FiddlerScript中,找到OnBeforeRequest方法,在其尾部添加代码如下:
If(oSession.url.indexOf(‘xxxx.com’)>-1){oSession.url = oSession.url.Replace(‘xxxx.com’,’xxxx.com/jiemi?ip=a&port=b’)}
第一种方法只有当次启动fiddler有效,重新启动后就会失效,而第二种方法会一直生效。
到这里问题就全部解决了,但是leader看过后立刻提出了几个改进点,其中一个是replace的时候ip值是不是可以变成动态获取,而不是需要每个人手动添加呢。
这样我们就要继续分析下FiddlerScript了,下面通过三个问题来进行分析:
一、FiddlerScript是用什么语言编写运行的?
通过网上调查了解到FiddlerScript的编码是C#,C#支持的系统库它也支持。
二、FiddlerScript有哪些语法?
上面说到C#支持的系统库FiddlerScript也都支持 同时FiddlerScript自身提供了一些库,在ScriptEditer右侧可以看到库及相应方法:
获取本机IP的方法需要调用System.Net.Dns.GetHostEntry()的方法
三、如何进行代码调试?
JAVA有log.d(),Python有print (),同样Fiddler也有调试方法:
FiddlerObject.log()
使用方法如下:
import System.Net;var hostname = Dns.GetHostName();var iphost = Dns.GetHostEntry(hostname).AddressList[1];FiddlerObject.log(iphost);}
本次分享就到这儿,希望对大家使用Fiddler进行测试的过程有所帮助。