首页 新闻 会员 周边 捐助

前后端分离如何防止Api被其他非法调用。

0
[待解决问题]

现在很多项目都使用前后端分离技术,前后端分离,就需要做接口安全性,如何保证接口不被非法调用。网上查询了很多说法都是说用 Token 。比如说你写了一个api ,然后这个api 可能要给你的其他前端人员调用,你把api给到你的前端人员,然后他们直接在前端调用你的api。因为api部署在外网,所以其他只要知道你的接口地址的人员都可以调用。这个时候,你就增加了一个token验证,你告诉前端人员,我给你一个账号和密码,你用这个账号密码,调用一个接口获取一个token,然后每次在调用其他 api的时候 都吧这个token 添加到 headers 里面。这个时候前端人员如果要拿到token,只能在前端把你给的账号密码写死,然后通过这个账号密码去获取token,这样一来,其他不吧账号密码暴露出去了。任何人都可以拿到账号密码,就可以调用这个接口。跟没有验证有好像也没什么区别。
好像 token这种方式也没什么用。

yzy的主页 yzy | 菜鸟二级 | 园豆:317
提问于:2020-09-17 12:32
< >
分享
所有回答(7)
0

没有办法,除非你不给人看。

都不用反解代码,直接外挂,如果字体随机、矢量矩阵化,还可以ocr。

你可以做验证,但验证大多也是破解了的,而且验证过多影响用户使用和体验。

信息想public,技术想private,这是一对矛和盾,只有相对。

花飘水流兮 | 园豆:13617 (专家六级) | 2020-09-17 13:11
0

没有理解楼主的问题点,为什么前端要写死账号密码?正常应该是在登入几面输入账号密码,后端鉴权,然后返回token给前端,前端存储token,之后所有的api都要添加token访问,后端试用token鉴权。
如果怕密码在传输过程中泄漏,可以在传输时加密,从http改为https。

8号位 | 园豆:596 (小虾三级) | 2020-09-17 13:45

token 用来代替session cookie 存储登录凭证这个是没有问题的,你说的这个我也能理解。但是如果用来做接口的安全验证感觉不适合,比如我开发了一套api ,我这套api可以给A,B,C三家公司使用。想要限制其他人不能使用。这个时候用token 好像就不适合。就好比,你去调用 微信接口的时候,微信会给你一个 appid和 对应的AppSecret 。假如这个接口支持跨域,并且前端html页面可以直接调用的话,你肯定需要用 这个appid 和 AppSecret 去换凭证,这个时候 你appid和 AppSecret 肯定会写在你的前端页面上面。这样就暴露了。AppSecret出去,然后通过页面查看原码就能活动AppSecret。就等于这个东西是没用的。

支持(0) 反对(0) yzy | 园豆:317 (菜鸟二级) | 2020-09-17 14:17

@yzy: 一套API给A,B,C三家公司,如果是给予oauth2授权,那我理解应该分发三个client客户端和secret,授权模式采用账号密码,或者简单授权根据情况而定,类似微信给每个开发者的appid和appsecret。这时每个人第三方都是不一样的,想要做一层业务校验可以可以加上自己的校验逻辑。
说回这个写到前台界面上的问题,我和楼下的观点是一致的,这种敏感信息是要写在后端的,就像你说的前端永远是不安全的,如果是调用第三方系统,所有的前端界面请求都要发送到自己的后端,然后通过自己的后端调用第三方,这样才能更好的控制逻辑,最好不要让前端发起第三方请求,这样后续会很难控制

支持(0) 反对(0) 8号位 | 园豆:596 (小虾三级) | 2020-09-24 09:22
0

你的理解有问题, 就那微信这个例子说:
你appid和 AppSecret不是写在前端页面上的, 是你在你的server端用的, 你调用微信接口都应该通过你的server中转请求.

另外, 如果是微信的接口由你的前端页面去调用, 接口的参数,token, 验签等信息都是在你server端生成好的.

czd890 | 园豆:14488 (专家六级) | 2020-09-17 15:34
0

参考微信,阿里云他们的api接口设计,一般不会直接暴露 密码,只提供 账号生成token,token不包含敏感信息。敏感信息要加密。
生成的token用非对称加密。token 有效期设置短一些。
我的系统用 rsa 非对称加密,前端每次登录时 生成一个公钥,再用公钥把账号和密码加密,一起提交到后端。

geass.. | 园豆:1821 (小虾三级) | 2020-09-17 17:43
0

怎么说呢不想打击你们,用第三方吧,搞些指纹,不然毫无软用,光靠加密是不行的,还要加上风控

小小咸鱼YwY | 园豆:3312 (老鸟四级) | 2020-09-17 19:46
0

1,https可以防止90%的请求截获
2,IdentityServer能保护内网的api不被外网访问
3,token有效期可降低风险
4,重要业务流程(如:转账),可设置二次验证(如:验证指纹或短信验证码)

Poseur | 园豆:216 (菜鸟二级) | 2020-09-17 21:24
0

跨域处理吧

灬丶 | 园豆:3 (初学一级) | 2020-09-21 08:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册