API 接口安全怎么可以保证?
公司开发了一个app,通过http请求laravel写的接口拿数据,可是在安卓上可以用一个
请求捕获工具拿到接口地址和传参,这样就很不安全,用户可以随意修改数据,我需要怎么做
才能让用户捕获不到地址和参数呢?
https?
1.token黑名单
2.https
jwt
...这是无解,你接口给出去 肯定会拿到呀,涉及到更新敏感接口这些肯定要有身份验证,最常用的就是jwt,至于资源类型的 看情况要验证和不验证
https
签名
可以学习微信的签名方法,将所有参数数据用 key => value 拼接起来,结尾接个 token,用md5加密后生成 sign 携带进来。
Api端拿到参数后去校验 sign 用同样的方法去拼接,看看生成的 sign 和 前端传来的 sign 是否一致即可
数据加密咯
openssl
https,使用acme.sh可以申请免费了,我好几项目用了。
之前有一个要求接口加密的,可以选择简单的base64或者md5做加密。
仿微信加密算是一种方法,另外。。你们boss纯属扯淡了。。。只要是接口,肯定能被拿到的。新开发的小程序没必要加密的。。根本没人去抓😂
@ibucoin base64只是种编码方式,而且 / + 还需要转换下
对称/非对称加密就OK了。 这种一般用于和第三方接口对接,一般自己用的app-api,我都没有采用。
不过上
https
是必须的无解。
一定可以捕获到地址和参数。
可以使用
https
,但还是可以抓到,参考Charles
。至于防修改,可以参考微信的加密方式,但是,我们可以通过反解apk
或ipk
文件来读懂然后模拟。总之,道高一尺我高一丈。
Passport OAuth 认证
可以看一下这个
很多人提到各种加密、HTTPS,其实这两种方案都是无效的。
我们常说不要信任任何前端发来的数据。其实是类似的道理,你永远不知道用户在做什么。道高一尺魔高一丈,看看当年 Windows 平台、吾爱破解,只要发给客户端,没有什么是安全的。
安全都是相对的,看公司可以为安全投入多大的成本了
防止不了,只能增加破解成本。再牛逼的加密,依然会被破解,时间长短而已,做好基本验证就行了(token、session、转义什么的)。与其考虑怎么防止别人拿数据,不如做好缓存加限流比较好。起码服务器不会被人恶意刷爆 :stuck_out_tongue_winking_eye:
根据墨菲定律,道高一尺,魔高一丈,你的应用接口再安全,终究也会被破解的,破解成本高低而已
参考下