假如一个产品包含 H5 端、小程序、APP 端三端。 小厂为了方便,肯定三端会有一些公用的接口,那么自定义协议之类的肯定不能用,还得用 http 协议
那么问题来了,https 通过本地抓包的方式,还是能解析你接口里面的内容。为了防止别人爬你数据,脱机请求你接口。API 的安全其实是非常重要的。对此 我有如下想法,不知道大家有无更好的 idea
首先分两步,h5 、小程序只允许比如微信授权登录的用户进行操作,接口可以不加密,但是用户的登录凭证不要设置太长。
第二步 APP 在用户启动的时候进行一种密钥交换算法,通过后端动态安全的下发密钥。可以参考 Diffie-Hellman 算法 第二步,APP 后续与服务端通信的核心接口全走 aes-256 之类的对称加密方式传 sign 值给服务端,为了防止别人能够重放攻击,可以考虑 APP 与服务端维持一个长链,动态推送时间戳之类的方式,保证每次就算请求参数一样,加密出的 sign 值也是不一样的。
但是问题来了,密钥交换的时候如果别人猜出你的交换算法,也有可能导致中间人攻击,所以可以考虑 APP 内置一个 rsa 的公钥(不知道有无更好的方案)。 当然 APP 需要把这些东西封装成.so 文件,然后 APP 包再用付费的方式加固。这样应该能拦住百分之 99 的脚本小子了。
最后再加上一些实时的行为风控。比如用户访问过于频繁 或者浏览的内容超过正常人的量,可以动态的弹出图形验证码之类的做校验