feature: App 逆向防护

This commit is contained in:
杭城小刘
2024-07-15 20:03:01 +08:00
parent 13f7457be9
commit 83fefff66b
109 changed files with 2549 additions and 672 deletions

View File

@@ -151,7 +151,7 @@ TCP 会利用另一种机制来解决超时重传带来的时间等待问题,
因为 HTTP 无连接,客户端和服务端交互的时候,打开一个 TCP 连接,然后交互,然后关闭 TCP 连接。下次需要交互的时候,继续打开一个 TCP 连接,继续交互,最后又关闭 TCP 连接。
<img src="./../assets/ HTTPContinuesousLink.png" style="zoom:40%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/ HTTPContinuesousLink.png" style="zoom:40%" />
@@ -180,7 +180,7 @@ Session、Cookie 都是针对 HTTP 协议无状态特点的补偿。
Cookie 主要用来记录用户状态,区分用户;状态保存在客户端。
<img src="./../assets/CookieLifeCycle.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CookieLifeCycle.png" style="zoom:30%" />
客户端请求服务端的时候,服务端生成 Cookie通过 HTTP 响应报文Header 部分中 `Set-Cookie` 首部字段设置 Cookie。
@@ -214,7 +214,7 @@ Session 也用来记录用户状态,区分用户。只不过状态保存在服
Session 需要依赖于 Cookie 机制。
<img src="./../assets/SessionWorkflow.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SessionWorkflow.png" style="zoom:30%" />
@@ -328,7 +328,7 @@ ETag 即 Entity Tag代表资源的唯一标识。主要用来解决修改时
代理体现在头信息上就是字段 `Via`,是一个通用字段,请求头或响应头里都可以出现。每当报文经过一个代理节点,代理服务器就会把自身的信息追加到字段的末尾,就像是经手人盖了一个章。如果通信链路中有很多中间代理,就会在 Via 里形成一个链表,这样就可以知道报文究竟走过了多少个环节才到达了目的地。
![](./../assets/HTTPProxyVia.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/HTTPProxyVia.png)
`X-Forwarded-For` 的字面意思是“为谁而转发”形式上和“Via”差不多也是每经过一个代理节点就会在字段里追加一个信息。但“Via”追加的是代理主机名或者域名而“X-Forwarded-For”追加的是请求方的 IP 地址。所以,在字段里最左边的 IP 地址就是客户端的地址
@@ -365,7 +365,7 @@ Host: www.xxx.com\r\n
HTTP 传输链路上,不只是客户端有缓存,服务器上的缓存也是非常有价值的,可以让请求不必走完整个后续处理流程,"就近"获得响应结果。特别是对于那些“读多写少”的数据,例如突发热点新闻、爆款商品的详情页,一秒钟内可能有成千上万次的请求。即使仅仅缓存数秒钟,也能够把巨大的访问流量挡在外面,让 RPSrequest per second降低好几个数量级减轻应用服务器的并发压力对性能的改善是非常显著的。
![](./../assets/CacheProxyServer.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CacheProxyServer.png)
代理服务器没有缓存的时候:代理服务器每次直接转发来自客户端的报文给服务端,转发服务端的报文给客户端,中间不会存储任何数据,只有基础的中转功能。
@@ -397,7 +397,7 @@ HTTP 传输链路上,不只是客户端有缓存,服务器上的缓存也是
下图是完整的服务器端缓存控制策略,可以同时控制客户端和代理
![](./../assets/CacheControlPipeline.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CacheControlPipeline.png)
### 客户端的缓存控制
@@ -477,7 +477,7 @@ DNS 解析查询方式:
- 递归查询,核心就是“我去给你问一下”
<img src="./../assets/DNSRecursiveQuery.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/DNSRecursiveQuery.png" style="zoom:30%" />
客户端根据网址去请求服务器之前,会先获取 IP 地址信息。
@@ -486,7 +486,7 @@ DNS 解析查询方式:
- 迭代查询,核心就是“我告诉你谁可能知道”
<img src="./../assets/DNSIteratorQuery.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/DNSIteratorQuery.png" style="zoom:30%" />
- 客户端发送请求的时候问一下本地 DNS 服务器,该域名对应的 IP 地址是什么,本地 DNS 服务器说“我不知道,你去问问根域名服务器,它可能知道”
@@ -506,7 +506,7 @@ DNS 解析查询方式:
##### 什么是 DNS 劫持
<img src="./../assets/DNSHacker.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/DNSHacker.png" style="zoom:30%" />
@@ -531,13 +531,13 @@ QADNS 劫持和 HTTP 的关系是什么?
从“使用 DNS 协议向 DNS 服务器的53端口请求” 变成“使用 HTTP 协议向 HTTP 服务器的80端口请求”
<img src="./../assets/HTTPDNSServerProcess.png" style="zoom:25%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/HTTPDNSServerProcess.png" style="zoom:25%" />
客户端通过 IP 直连的方式,向 DNS 服务器,通过 HTTP Get 请求的方式,携带域名参数,然后响应一个具体的 IP 地址值给客户端。剩余流程就是拿着请求后的 IP 地址去完成其他逻辑。
- 长连接
<img src="./../assets/LongConnectionAvoidDNSHacker.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/LongConnectionAvoidDNSHacker.png" style="zoom:30%" />
在客户端和业务服务器之间,建立一个长连接 Server可以理解成代理服务器。
@@ -551,7 +551,7 @@ QADNS 劫持和 HTTP 的关系是什么?
#### DNS 解析转发
<img src="./../assets/DNSParseRedirect.png" style="zoom:20%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/DNSParseRedirect.png" style="zoom:20%" />
比如某移动 App 发起网络请求,移动 DNS 服务器为了节省资源,将请求转发到某电信 DNS 服务器,用于帮助移动 DNS 服务器,解析域名,获取对应的 IP 地址。