如何保护在小程序端保护 Flask 写的 API? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shilielin
V2EX    Flask

如何保护在小程序端保护 Flask 写的 API?

  •  
  •   shilielin 2018-06-18 13:09:47 +08:00 5616 次点击
    这是一个创建于 2673 天前的主题,其中的信息可能已经有所发展或是发生改变。

    打算做个小程序,所以用 Flask 写了后端 API,现在的问题是这个 API 没有加入任何的验证信息。只要知道 API 的连接构造,每个人都可以请求 API,然后修改后台的数据。

    因为我的数据都是会在小程序都请求,所以现在的想法就是能不能在微信用户初次给我小程序授权的时候,利用 unionid 生成一个初始的密码,并且利用 unionid+密码生成一个 taken,以后用户每次请求数据的时候,就通过用户的 unionid 和 taken 进行鉴权。

    不知道这样是否可行?另外想着到目前给微信小程序使用的 API 常用的处理是怎样的?

    小白用户,希望大家可以指点一下,谢谢!

    16 条回复    2018-06-23 22:53:55 +08:00
    silhouette
        1
    silhouette  
       2018-06-18 13:32:53 +08:00 via Android
    token 不是 taken 哦
    rb6221
        2
    rb6221  
       2018-06-18 13:36:30 +08:00 via Android
    后端自己支持一下 token 验证不行么
    hunk
        3
    hunk  
       2018-06-18 13:43:48 +08:00
    了解下 JWT 登录。
    返回 token,保存为 cookie.
    shilielin
        4
    shilielin  
    OP
       2018-06-18 15:02:17 +08:00 via iPhone
    @silhouette 嗯,写错了
    shilielin
        5
    shilielin  
    OP
       2018-06-18 15:03:09 +08:00 via iPhone
    @hunk 如果使用 JWT 的话,是不是也要使用 httpauth 的 token 类?
    stonehe
        6
    stonehe  
       2018-06-18 16:07:37 +08:00
    flask-httpauth 这么方便简单的库为什么不拿来用
    woscaizi
        7
    woscaizi  
       2018-06-18 16:22:47 +08:00 via iPhone
    直接在服务端验证 unionId,openId 是否存在,最简单的办法吧。
    zhuangzhuang1988
        8
    zhuangzhuang1988  
       2018-06-18 22:14:47 +08:00
    用 django-rest-framework
    自己搞认证啥,api 限制啥的瞎折腾 不然直接用标准的
    KgM4gLtF0shViDH3
        9
    KgM4gLtF0shViDH3  
       2018-06-18 22:16:16 +08:00
    小程序的代码别人拿不到,不知道 root 之后能不能拿到,如果别人拿不到的话可以在客户端存个 secret 然后和时间戳什么的加密成一个 token,请求的时候把 token 带上就能验证了。
    shilielin
        10
    shilielin  
    OP
       2018-06-18 22:54:37 +08:00 via iPad
    @zhuangzhuang1988 嗯,我打算用现有的轮子,只是想知道目前大家是不是都是用 Web 和 app 一样的思路处理小程序的 API
    wzw
        11
    wzw  
       2018-06-18 23:12:46 +08:00
    flask-restful 可以去看看
    geekcorn
        12
    geekcorn  
       2018-06-18 23:16:13 +08:00 via iPhone
    理论上通过微信授权流程链接获取的 unionid 或者 openid 是没法伪造的吧,直接数据库匹配数据就行了吧,不放心就加一层 jwt 认证,推荐 pyjwt 框架
    lcy630409
        13
    lcy630409  
       2018-06-19 10:22:25 +08:00
    想复杂了,就是把 session 替换成 token
    前台在第一次联系后台的时候生成一个唯一 token,返回给前台,前台存在 cookie 里,每次请求的时候在 header 里带上这个 cookie 就行了
    mht
        14
    mht  
       2018-06-19 16:44:37 +08:00
    @bestkayle 我在一个小程序的交流群里 见过有人专门用安卓手机抓包,然后用 github 上的开源工具解包小程序代码,兜售小程序的源码来着...
    shilielin
        15
    shilielin  
    OP
       2018-06-20 12:50:06 +08:00 via iPhone
    @mht 这都可以啊
    ybark
        16
    ybark  
       2018-06-23 22:53:55 +08:00
    手机本地找到小程序代码包 wxapkg,通过 github 上有人写的反编译还原脚本(项目距发这条评论前 11 天还在更新)。理论上看,若真要有团队有时间去搞你的小程序,如果你没做特别的处理,小程序就是开源的。那么此时后端 api 带不带 token,就没区别了,整套代码跑起来,token 也能拿到,后面需要 token 的 api 也不用伪造请求。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2712 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 12:06 PVG 20:06 LAX 05:06 JFK 08:06
    Do have faith in what you're doing.
    ubao 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