未设置标题
WARNING
- 我个人是偶然间打开web端抖音然后F12发现有rsa密钥对才开始通过配合ai研究的这套防护流程
- 纯纯c端接口才会需要的东西,项目中加这个主要是感兴趣,实际项目中很少有接口需要这种程度的防护
- 最主要可能就是像抖音那种防止爬虫或者脚本去爬接口,不过会逆向的或者懂行的这种程度的也是防不住的,毕竟一个F12一打开,web端没有什么秘密,前端总要有个地方去拼接sign,这部分代码在客户端就是裸奔的
- 抖音实际的操作流程应该是比这个复杂很多,它们应该都自己的sdk封装,签名的部分应该会复杂很多很多,我这个只是一个很简单的复现,感兴趣的github上有开源项目
- 有很多细节下面流程图中体现不出来,前端代码是完全开源的,感兴趣的可以看一下
- 签名的部分内容可以有很多文章去做,我看了一下GitHub上的逆向开源项目后后续可能对签名的部分进行一些补充
mermaid
flowchart TB
OpenPage[用户首次打开页面]
SetupSign[setupSign 初始化]
CheckClientKey{是否存在 clientKey}
GenClientKey[生成 clientKey 并写入 localStorage]
GenRSA[生成 RSA 密钥对 私钥存储]
SendPubKey[发送 RSA 公钥到后端]
RequestAES[请求 AES Key]
AESDecrypt[前端使用私钥解密 AES]
AESOK[AES 获取成功 准备后续签名]
API_RegisterPub[后端保存 RSA 公钥到 Redis]
API_GetAes[后端检查 Redis 是否存在 AES]
GenAES[后端生成 AES Key]
EncryptAES[后端使用 RSA 公钥加密 AES]
ReturnEncAES[后端返回加密后的 AES]
RedisPub[Redis 存储 RSA 公钥]
RedisAES[Redis 存储 AES Key]
OpenPage --> SetupSign
SetupSign --> CheckClientKey
CheckClientKey -->|否| GenClientKey
GenClientKey --> GenRSA
CheckClientKey -->|是| GenRSA
GenRSA --> SendPubKey
SendPubKey --> API_RegisterPub
API_RegisterPub --> RedisPub
SendPubKey --> RequestAES
RequestAES --> API_GetAes
API_GetAes -->|无 AES| GenAES
GenAES --> RedisAES
RedisAES --> EncryptAES
EncryptAES --> ReturnEncAES
API_GetAes -->|有 AES| ReturnEncAES
ReturnEncAES --> AESDecrypt
AESDecrypt --> AESOK