第一节:HTTP中间人代理实现
HTTP中间人代理示意图:
由于HTTP的传输内容都是明文,想实现中间人代理就变得非常简单。
部分代码实现如下:
完整源码:../code/chapter1/httpMitmProxy.js
npm script运行方式
上面的代码实现了一个最简单的http代理。
流程概括如下:
- 2、根据客户端请求,向真正的目标服务器发起请求。
- 3、把客户端请求内容转发给目标服务器。
- 4、把真正的服务器响应内容转发给客户端。
代理服务启动好后,我们需要把本机上的http请求都通过代理做转发。
Windows 下设置代理方式
第一步:
第二步:
第三步:
MAC 下设置代理方式
第一步:
第二步:
第三步:
通过该代理服务我们已经成功的与通信的两端(服务器和客户端)同时建立了连接。作为”中间人”,轻而易举就能篡改经过的请求和响应。
通过http代理修改html内容:
完整源码:
npm script运行方式
相比第一个代理只实现了单纯的转发,这一次的实现的代理对客户端请求和服务器响应都做了篡改。
1、在处理客户端请求时,直接去掉了的http头部。
2、修改了服务器响应内容,给所有html注入了一段alert的js代码<script>alert("Hello https-mitm-proxy-handbook!")</script>
。为了方便的修改pipe流的内容,这里用到了through2。
现在通过代理来访问任何http的网站都会弹出alert框
从上面的http代理的实现可以看到,单纯的http协议是没有任何安全保障。想想平时身边的黑Wi-Fi、黑心运营商,想窥探或篡改通过http传输的内容是多么容易的一件事。