前后端分离的项目如何防止 api 被第三方利用

2019-02-14 10:53:19 +08:00
 imherer
假如 api 是不需要任何鉴权,就像 v 站的 api 一样,第三方可以利用 api 去做一些小程序或者内容展示的网站

我不想让第三方利用我的 api,但是又不能做鉴权

这个好像是不能杜绝的吧,只能从利用 api 的难度方面入手?
13511 次点击
所在节点    程序员
88 条回复
flyingghost
2019-02-14 11:19:11 +08:00
鉴权 = 识别客户端合法性。你都放弃鉴权了,等于是放弃识别能力了,又怎么要求“识别”自己人和第三方呢?
就像我家大门不需要钥匙推门就进。但我要防贼。这么等价替换的话,你就会发现,你得有一双贼眼,能发现贼身上自带的一些本征:衣着、神情、习惯动作、气味、面相、指纹、DNA。。。
然鹅,以上在 http 世界都可以仿冒,仿冒门槛还挺低,成本和技巧难度远低于 Neal Caffrey 仿冒一个良民。
q397064399
2019-02-14 11:20:06 +08:00
@imherer #17 这本身在逻辑上就是矛盾的.. 既不想给门上锁,又不想小偷轻易偷到你的东西
YzSama
2019-02-14 11:21:16 +08:00
内网
geelaw
2019-02-14 11:23:58 +08:00
@flyingghost #21 鉴权是识别用户是否有访问资源权利的过程,和客户用什么渠道去访问没关系。
fakeshadow
2019-02-14 11:24:38 +08:00
把游客的 rate limit 做低点就凑合吧。
index90
2019-02-14 11:31:38 +08:00
不想让第三方利用,首先你需要一个能够鉴别什么请求是第三方的规则。
方法有很多种,AK+SK,JWT,等等,如果这些都称作鉴权,那意思就是不能使用规则。
不能使用规则的话,就划一个 private network,把第三方隔离出去。

我觉得楼主想找的答案,不应该是不能使用“鉴权”,而是无侵入或者低侵入的方案吧。
Heavytiger
2019-02-14 11:35:09 +08:00
@DavidNineRoc 小程序用的 api,这种有没有教程推荐一下,最近要做,学习一下
imherer
2019-02-14 11:35:23 +08:00
@index90
``我觉得楼主想找的答案,不应该是不能使用“鉴权”,而是无侵入或者低侵入的方案吧``

就是这个意思,我表达的不对
DavidNineRoc
2019-02-14 12:00:49 +08:00
@Heavytiger 直接搜 sign 参数验证. 很多 api 后端与后端的都是使用这种方式. 如短信平台之类的,如果是小程序,你的源代码别人看不见,可以当做`后端`代码
如果是 web, 代码能被别人看到,那么内网通信 api 是最好的做法
ttvast
2019-02-14 12:08:15 +08:00
@imherer 爬虫你是很难防的,就算是鉴权也不能。
但是根据你的描述,主要是防止其他网站调用你的 API,这样就可以通过 referer 来禁用
flyingghost
2019-02-14 12:08:24 +08:00
@geelaw #24 我的意思是对比现实世界,除了协议信息“钥匙”之外会有大量协议之外的本征信息逸散出来供我们利用。但在计算机世界 http 调接口这个场景下,ip、referer、ua、时频、参数特征和分布。。。本征信息少很多,而且要么无法利用,要么伪造简单,要么效果不佳。

其实 lz 提出的问题 X 背后,我更好奇的是问题 Y:为什么会有这样的需求场景?原始需求有没有放弃鉴权之外的其他方案?
chinvo
2019-02-14 12:11:36 +08:00
客户端合法性是个无解的问题,只能不断玩躲猫猫的游戏,没法从根本上杜绝
xpresslink
2019-02-14 12:19:08 +08:00
如果不鉴权的话,楼主你从逻辑上如何区别客户端和第三方?行为上有什么不同?
neko2
2019-02-14 12:19:32 +08:00
这和爬虫和反爬虫其实是一个道理。只能增加反爬难度
Junn
2019-02-14 12:22:52 +08:00
加密啊
deepdark
2019-02-14 12:30:05 +08:00
不做鉴权的话就前端生成用户指纹,然后把用户行为记录下来同步给风控端,风控端通过分析用户行为给到后端该用户是人是鬼,行为是否合法等,后端再考虑接口要不要返回数据。但是这一整套风控端搞下来,需要用户行为模型,还有一些规则。而且要保证是实时分析和处理。不是一件容易的事
mooncakejs
2019-02-14 12:57:07 +08:00
没办法的啊。只能提高难度让它没有收益。
yuangezhizaobak
2019-02-14 13:03:50 +08:00
@NjcyNzMzNDQ3 security-x5 是什么?
zjsxwc
2019-02-14 13:07:10 +08:00
最简单方式就是定期改接口
Chingim
2019-02-14 13:13:00 +08:00
@deepdark 用户行为的数据不是也可以伪造吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/534809

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX