第一节:HTTP中间人代理实现

HTTP中间人代理示意图:

由于HTTP的传输内容都是明文,想实现中间人代理就变得非常简单。

部分代码实现如下:

完整源码:../code/chapter1/httpMitmProxy.js

npm script运行方式

上面的代码实现了一个最简单的http代理。

流程概括如下:

  • 2、根据客户端请求,向真正的目标服务器发起请求。
  • 3、把客户端请求内容转发给目标服务器。
  • 4、把真正的服务器响应内容转发给客户端。

代理服务启动好后,我们需要把本机上的http请求都通过代理做转发。

Windows 下设置代理方式

第一步

第二步

第一节:HTTP中间人代理实现 - 图1

第三步

MAC 下设置代理方式

第一步

第一节:HTTP中间人代理实现 - 图2

第二步

第三步

通过该代理服务我们已经成功的与通信的两端(服务器和客户端)同时建立了连接。作为”中间人”,轻而易举就能篡改经过的请求和响应。

通过http代理修改html内容:

完整源码:

npm script运行方式

相比第一个代理只实现了单纯的转发,这一次的实现的代理对客户端请求和服务器响应都做了篡改。

1、在处理客户端请求时,直接去掉了的http头部。
2、修改了服务器响应内容,给所有html注入了一段alert的js代码<script>alert("Hello https-mitm-proxy-handbook!")</script>。为了方便的修改pipe流的内容,这里用到了through2

现在通过代理来访问任何http的网站都会弹出alert框

第一节:HTTP中间人代理实现 - 图3

从上面的http代理的实现可以看到,单纯的http协议是没有任何安全保障。想想平时身边的黑Wi-Fi、黑心运营商,想窥探或篡改通过http传输的内容是多么容易的一件事。