首页 > PHP,好久不见 > App用户身份验证
2016
03-13

App用户身份验证

安全问题

现在的移动互联网应用,大多是通过客户端带上数据请求不同动作的api来实现不同业务要求的。即是说,通过抓包就可以获取到请求的api和发送、接收到的数据。如果没有一定的安全防范意识,很容易被攻击。
这里推荐一款叫fiddler的抓包工具,使用方法自行搜索。下面是对车来了App的抓包截图:
没有使用https,所以数据完全暴露出来了。可以看到我经常坐的19路其中一辆公交还有12分钟到站。

App用户身份验证 - 第1张  | foam

用户身份验证

Web应用可以使用session来保存用户会话,App可没有这东西。
下面是一个很致命的设计:

App用户身份验证 - 第2张  | foam
只要带上userId,服务端就会为该用户执行操作。就是说任何人都可以假冒123这个用户执行一些操作。
嗯,打死都不承认上面这种设计我曾经写过。

其实参考session的实现原理就可以解决这个问题。大多数情况,Session都是结合客户端的Cookie来实现的。
Web中Session的实现
1.用户的登录名、密码校验正确后,我们通常会将用户的一些信息存入到Session中。
2.此时服务端会生成一个全局唯一标识SessionID来标记这个用户生成的Session,并将该SessionID通过Set-Cookie回应给浏览器。
3.So,浏览器访问该网站的其他页面时只要带上了这个SessionID,服务端就知道它面对的用户存储在了哪个Session中,程序便可取出来用。

如何实现

那么移动端App怎么玩?与Web的Session是一样的,只不过我们要自己实现了。

简单实现
1.用户名密码校验无误后,生成UUID,存储到该用户记录中对应的字段中
2.将该UUID返回给前端(Android、iOS等)
3.App请求其他需要用户登录的接口时,带上该字段
4.服务端校验无误后方可继续执行业务

App用户身份验证 - 第3张  | foam

进一步完善以便实现其他需求的话,可以在生成UUID的同时,记录下用户ip、设备ID、过期时间等~
如:发现设备ID与登录时的不同,要求其重新登录~

当然,校验技术不可能是完美的,Hacker们有太多的方法骗过服务端。作为开发者,能做的是尽可能地提高验证水平和Hacker的破解成本;而作为用户,不要总想着蹭网啦,免费或虚假Wifi的后面可能有人正抓着包…

最后编辑:
作者:foam
foam
这个作者貌似有点懒,什么都没有留下。

App用户身份验证》有 2 条评论

  1. Trity 说:

    那我是不是在登录的时候进行抓包,把返回的相关信息进行捕捉,得到上面的Auth之后,我也可进行想要的操作了?

    • foam foam 说:

      这里的auth是一个身份凭证的抽象,理论上拿到身份凭证自然是可以进行操作的啦~

留下一个回复

你的email不会被公开。