Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.6k views
in Technique[技术] by (71.8m points)

如果保证后端接口不会被随便调用?

正在开发一套WEB系统。这套系统挂接在某个APP里面。该APP暴露给我一个js接口用来让我获取登录APP用户的手机号。拿到用户手机号后我会请求自己的服务器接口来获取自己系统里面的该用户信息。
可是这样我发现我的接口无法验证传过来的手号是不是通过APP的js接口得到的。
这样无法验证我感觉很不安全,比如通过浏览器得到接口,然后随便写个手机号发送请求接口就能得到我系统里面的用户信息。

还有很多类似的情况,比如给接口传用户id或手机号来记录用户身份参加某个活动。按理说应该是用户本人进入活动页面点击了参加活动按钮才可以。但是也可能是别人随便一个手机号直接调用活动接口也能参加活动了。

想过用token方式来实现,研究了一下感觉token前提是得有用户登录的操作才可以。像我这个系统没有登录操作,因为登录操作已经在APP里面进行了,要求我这套系统不能再登录。那该如何才能保证安全呢?求各位的指点,在此提前感谢大家。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

我感觉是这样。APP暴露给我们一个js接口用来获取登录APP用户的手机号,APP不是我们负责的,所以其安全与否我们不需要关心,关心主要是也没有用。

如果APP接口只返回给我们手机号的话,其实是无法做不到百分百安全的,因为你无论怎么处理,加token也好,前端加密后端验证也罢。加token的过程与加密的过程等必然需要在前端进行,在前端进行就没有秘密可言。

所以我感觉我们只能是增加安全性,并没有办法彻底避免。

建议如下:

  1. 获取到用户手机号后,使用hash(手机号+签+时间戳)生成hash值,然后将手机号、hash值、时间戳一并传给后台,后台首先验证时间戳是否在合理的范围内(比如允许与服务器偏差60s),然后难hash值是否已经在60s使用过,最后在使用使用hash(手机号+签+时间戳)来验证接收的hash值是否合法。
  2. 在合法的情况下,为此手机号生成唯一的token,并在后台做好token与手机号的映射,然后把token返回给前端。
  3. 在以后的请求中,直接使用token来替待手机号,后台根据token来获取对应的手机号是哪个。

当然了,实际过程中可能还要更复杂一些,比如:设置token的有效期,在老token过期之前,前端发次老token来换取新token;在前端建立手机号与token的对应关系,所以发现手机号变了就重新请求一个新token等。

希望能够帮到你。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...