请问如何防止 API 接口参数暴露? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nlimpid
V2EX    API

请问如何防止 API 接口参数暴露?

  •  
  •   nlimpid
    nlimpid 2017-05-06 01:45:04 +08:00 6995 次点击
    这是一个创建于 3149 天前的主题,其中的信息可能已经有所发展或是发生改变。
    实现一个 API 的接口,但是要防止接口信息暴露,有什么好的方法吗?比如根据用户名查询用户的信息,https 还是能看到接口请求的内容,别人也能使用这个接口查别人信息。有以下几个方案。

    1. 加密内容。用一个密钥和所有的参数签名成一个 sign,请求时候加上这个 sign。这样不知道密钥,即使看到了所有的参数也无法访问别人的。
    2. jwt。请求(比如登录)一个 token,每次附带这个 token 请求即可。优点是不需要客户端每次加密,缺点是如果 token 丢了很危险?
    3. oauth ?如果需要开放给第三方的平台会是个好选择把,但是如果客户端 /服务端都是第一方 oauth 是否也是可行的呢?

    烦请不吝指教。
    5 条回复    2017-05-06 22:19:15 +08:00
    isCyan
        1
    isCyan  
       2017-05-06 01:50:21 +08:00 via Android
    加密当然没什么大用,用户认证啊,最简单的 HTTP Basic Auth 或者复杂点 Header 里面传内容用 Key 的 HMAC 签名都可以,甚至用户登录留下个 Cookie 都有用
    tlday
        2
    tlday  
       2017-05-06 03:39:35 +08:00 via Android   3
    你的重点不对。不过我也不是专业的后端,浅谈几点拙见,如果有误烦请楼下不吝指出。
    https 是为了防止中间人攻击,信息的发送者和接收者其实都是知道发送的是什么东西的。所以只是保证传输过程的安全可靠。(比如某个人架了免费代理,不知情的用户用了这个代理,数据报在传输过程中被记录,那么这个人就可以伪造为这个不知情的用户来窃取这个用户的信息等等,https 可以避免这种情况)
    你要明确你想防御的对象是谁,是防止中间人窃取了用户 A 的"令牌"伪造成用户 A 窃取用户 A 的信息?那 https 可以很好的解决这个问题。
    但是如果你想防御的是 A 用户根据接口参数猜出参数意义借以窃取 B 用户的信息,那么你要在服务端作鉴权,A 用户不应当有访问 B 用户信息的权力。
    至于剩下你说的那些,无论是 session 还是 token 都只是鉴别 A 用户确实是 A 用户的"令牌",都有过期时间。
    你想考虑的这种情况说,如果是用户自己的浏览器或系统,软件,被 crack,导致 cookie 等信息泄露,那么你其实能做的不多。唯一能做的就是类似(异地登录短信提醒,ip 突然变更要求重新输入密码)这种措施来提醒用户你的客户端环境不安全,可能被黑了,并提醒用户及时更换密码,更换密码的同时把所有 token 过期掉等等来最大程度降低用户损失。
    oauth2.0 是开放用户部分信息给第三方使用的一种三方鉴权协议,一般用作第三方登录这种,可能并不符合你的需求。如果你想看一些比较好的实现,可以参考 github,facebook 之类的。
    wangxiaoer
        3
    wangxiaoer  
       2017-05-06 13:13:42 +08:00
    很奇怪你的需求,不知道你到底是想隐藏请求的参数、请求的内容还是响应的内容?如果是想隐藏请求的数据,我觉得你的需求很奇怪,这些都是明码啊,怎么隐藏?
    至于你说的“比如根据用户名查询用户的信息,https 还是能看到接口请求的内容,别人也能使用这个接口查别人的信息”,更不理解了,难道你们的查询接口不做验证的吗?如果从业务上讲本身就是开放的 api,那还隐藏什么?如果业务上不是对所有人开放的,那就加验证、权限判定啊!
    v1024
        4
    v1024  
       2017-05-06 14:12:34 +08:00 via iPhone
    自己「发明」协议
    sensui7
        5
    sensui7  
       2017-05-06 22:19:15 +08:00
    HttpOnly, Secure 的 jwt token 还怕丢?? 那我看, 还是局域网吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2490 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 12:22 PVG 20:22 LAX 04:22 JFK 07:22
    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