服务器端算是个应用服务器吧,Flask 搭了 RESTful API,PyQT 客户端调用 RESTful API 完成业务操作。但是卖给用户的话是按 1 个用户授权,如果用户登录后给个 Token 做以后 API 的授权的话,抓包或浏览器调试工具里找到 API 就可以无限制调用需要 Token 的 API 了,RESTful 是无状态的,一般客户公司里都一个公网 IP 出来的,有办法识别吗?还是用其它授权方案代替 Token ?
先谢过了。。
先谢过了。。
1
XYxe Jul 7, 2017 一次请求换一个 Token |
2
lerry Jul 7, 2017 via iPhone
https 应该抓不到吧
|
3
prasanta Jul 7, 2017 via Android
证书呀,就像银行登陆的证书
|
5
TJT Jul 7, 2017
证书,请求签名
|
6
jinganchuqi Jul 7, 2017 via Android 加个签名不就行了,token 参与签名。
|
7
akira Jul 7, 2017 首先,任何可以在用户机器上运行的代码都是可破解的,不管你如何限制多人访问,总是有办法可以绕过的。
一个比较简单粗暴的方案,提交的接口参数里面,增加一个加密过的 自增字段。 然后统计自增数字有冲突的情况,基本上,就可以知道哪个账号是有多开行为了的。 |
8
ipconfiger Jul 7, 2017
@est 试过这种方案, 不行, 网络抖动一些就隔屁了.
|
9
tomczhen Jul 7, 2017 改成按 API 调用次数收费。:doge:
讲正经的。 使用 jwt 来解决,在 jwt 存放用户名,token 和一个随机值(比如 uuid ),服务端保存下发的 jwt,推荐 redis。 jwt 过期时间设定要小一些,比如 1 分钟,甚至 30 秒,如果网络不稳定可以适当延长有效时间。 API 发现 JWT 过期时,重新生成一个 JWT 返回即可,同样服务端要保存。 这里 jwt 和鉴权 token 可以没有关联(取决于你的业务),jwt 可以过期,但必须是有合法签名,如果业务允许,你仍然可以让他继续。 如果使用抓包的方式获取 jwt 和 token,然后多处使用,那么在这个 jwt 过期后必然会产生,一个用户有多个不同的 jwt 同时有效的情况。 |
10
DCjanus Jul 8, 2017 使用 SSL pinning 技术增大抓包难度。
自增字段、加密网卡号等方式都可以增加破解难度。 破解难度高到一定程度即可,再费劲就得不偿失了。 |
11
devilyaos Jul 8, 2017 via iPhone
所以好些软件绑死 mac...
|
12
jininij Jul 8, 2017 via Android 如果客户知道你 API 协议的细节,就可以搭建 API 中心,所有的客户端调用接口,都不是直接调用你的服务器接口,而是调用 API 中心的接口,API 中心对数据进行签名,使用队列一个一个地请求。你在服务器端没有任何办法可以知道,真正使用你服务的是谁。
你能做的,只有尽可能让你的 API 不会被挖出来了。 |
13
vingz Jul 8, 2017 via Android
做头部数据的 hash ? hash 不一致就无效了,https 更好了
|