接口加密。有用,但不完全有用!

95 阅读2分钟

现在越来越多网站基于前后端分离的架构,可以从F12打开network选项-fetch/xhr查看到接口请求信息,这样也带来一些问题,别人可以从请求返回数据中可轻易的看出数据内容,被接口爬虫也相当容易,部分网站出于安全、防护的考虑会对接口进行加密处理,但其实这些加密也很容易被破解出来,前端如果要显示数据肯定会对数据进行解密,这也意味着加解密方式是公开的

示例:

第一个:武汉大学科技成果转化平台

第二个:innomatch

前端加密的方式大概率也是对称加密,即使是非对称加密,前端也会包含非对称密钥的一部分(公钥),所以可以从网站的js文件中寻找加解密方式。

这里有一点小知识:

  1. 前端页面大概率都是混淆加密(不好直接看出页面逻辑),但一些密钥信息还是原文显示的
  2. 前端一般使用CryptoJS进行加解密
  3. 秘钥(字节数组)通常以UTF-8、Hex、Base64编码形式表达

由此可以从CryptoJS出发从混淆加密的代码中寻找加密方式,CryptoJS对于加密处理如下:

可以看到都使用enc,那么可以通过搜索“.enc.”、“AES”、“parse”关键字去js中查找加密逻辑 第一个示例:搜索js“.enc.”,可以明显的看出加密方式为AES/CBC/ZeroPadding,第一个aaDJ为key,第二个412A为iv

使用hutool aes对返回加密进行验证

成功获取到数据


第二个示例:接口返回数据中明显包含iv数据(动态iv),说明方式大概为AES/CBC,AES/ECB不包含iv数据,搜索“AES”等关键词确认位置(调试确认接口iv与调试参数相同),即可得到word为key值

此时的key还无法直接使用,使用ai编写出js数组转成为base64形式

使用上面描述的hutool aes工具,尝试使用不同的padding去解密(因为不知道js代码中的padding是什么),使用PKCS7Padding获得数据,解密成功

总结

接口加密可提供一定程度的保护,但并非绝对安全,深入破解仍有可能。真正的接口保护应从多维度入手,包括接口防刷、严格鉴权、敏感数据脱敏以及最小化数据暴露,全面提升安全性