基于 Flask 的 RESTful API,想控制并发用户数为 1 个,但是用 Token 的话抓包拿到 Token 不就可以自己用 Token 调用 API 了吗? C/S 两端都是用 Python 的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
a251922581
V2EX    Python

基于 Flask 的 RESTful API,想控制并发用户数为 1 个,但是用 Token 的话抓包拿到 Token 不就可以自己用 Token 调用 API 了吗? C/S 两端都是用 Python 的

  •  
  •   a251922581 2017-07-07 20:49:46 +08:00 4841 次点击
    这是一个创建于 3047 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器端算是个应用服务器吧,Flask 搭了 RESTful API,PyQT 客户端调用 RESTful API 完成业务操作。但是卖给用户的话是按 1 个用户授权,如果用户登录后给个 Token 做以后 API 的授权的话,抓包或浏览器调试工具里找到 API 就可以无限制调用需要 Token 的 API 了,RESTful 是无状态的,一般客户公司里都一个公网 IP 出来的,有办法识别吗?还是用其它授权方案代替 Token ?
    先谢过了。。
    13 条回复    2017-07-08 09:04:24 +08:00
    XYxe
        1
    XYxe  
       2017-07-07 21:05:46 +08:00   1
    一次请求换一个 Token
    lerry
        2
    lerry  
       2017-07-07 21:13:11 +08:00 via iPhone
    https 应该抓不到吧
    prasanta
        3
    prasanta  
       2017-07-07 21:19:30 +08:00 via Android
    证书呀,就像银行登陆的证书
    est
        4
    est  
       2017-07-07 21:55:20 +08:00
    @XYxe 挺靠谱。做个状态机。
    TJT
        5
    TJT  
       2017-07-07 22:18:55 +08:00
    证书,请求签名
    jinganchuqi
        6
    jinganchuqi  
       2017-07-07 22:21:03 +08:00 via Android   1
    加个签名不就行了,token 参与签名。
    akira
        7
    akira  
       2017-07-07 22:37:16 +08:00   1
    首先,任何可以在用户机器上运行的代码都是可破解的,不管你如何限制多人访问,总是有办法可以绕过的。

    一个比较简单粗暴的方案,提交的接口参数里面,增加一个加密过的 自增字段。 然后统计自增数字有冲突的情况,基本上,就可以知道哪个账号是有多开行为了的。
    ipconfiger
        8
    ipconfiger  
       2017-07-07 23:02:23 +08:00
    @est 试过这种方案, 不行, 网络抖动一些就隔屁了.
    tomczhen
        9
    tomczhen  
       2017-07-07 23:20:27 +08:00   2
    改成按 API 调用次数收费。:doge:

    讲正经的。

    使用 jwt 来解决,在 jwt 存放用户名,token 和一个随机值(比如 uuid ),服务端保存下发的 jwt,推荐 redis。

    jwt 过期时间设定要小一些,比如 1 分钟,甚至 30 秒,如果网络不稳定可以适当延长有效时间。

    API 发现 JWT 过期时,重新生成一个 JWT 返回即可,同样服务端要保存。

    这里 jwt 和鉴权 token 可以没有关联(取决于你的业务),jwt 可以过期,但必须是有合法签名,如果业务允许,你仍然可以让他继续。

    如果使用抓包的方式获取 jwt 和 token,然后多处使用,那么在这个 jwt 过期后必然会产生,一个用户有多个不同的 jwt 同时有效的情况。
    DCjanus
        10
    DCjanus  
       2017-07-08 04:46:07 +08:00   1
    使用 SSL pinning 技术增大抓包难度。
    自增字段、加密网卡号等方式都可以增加破解难度。
    破解难度高到一定程度即可,再费劲就得不偿失了。
    devilyaos
        11
    devilyaos  
       2017-07-08 07:56:08 +08:00 via iPhone
    所以好些软件绑死 mac...
    jininij
        12
    jininij  
       2017-07-08 08:58:30 +08:00 via Android   1
    如果客户知道你 API 协议的细节,就可以搭建 API 中心,所有的客户端调用接口,都不是直接调用你的服务器接口,而是调用 API 中心的接口,API 中心对数据进行签名,使用队列一个一个地请求。你在服务器端没有任何办法可以知道,真正使用你服务的是谁。

    你能做的,只有尽可能让你的 API 不会被挖出来了。
    vingz
        13
    vingz  
       2017-07-08 09:04:24 +08:00 via Android
    做头部数据的 hash ? hash 不一致就无效了,https 更好了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5411 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 08:34 PVG 16:34 LAX 00:34 JFK 03:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86