安全问题
现在的移动互联网应用,大多是通过客户端带上数据请求不同动作的api来实现不同业务要求的。即是说,通过抓包就可以获取到请求的api和发送、接收到的数据。如果没有一定的安全防范意识,很容易被攻击。
这里推荐一款叫fiddler的抓包工具,使用方法自行搜索。下面是对车来了App的抓包截图:
没有使用https,所以数据完全暴露出来了。可以看到我经常坐的19路其中一辆公交还有12分钟到站。
用户身份验证
Web应用可以使用session来保存用户会话,App可没有这东西。
下面是一个很致命的设计:
只要带上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.服务端校验无误后方可继续执行业务
进一步完善以便实现其他需求的话,可以在生成UUID的同时,记录下用户ip、设备ID、过期时间等~
如:发现设备ID与登录时的不同,要求其重新登录~
当然,校验技术不可能是完美的,Hacker们有太多的方法骗过服务端。作为开发者,能做的是尽可能地提高验证水平和Hacker的破解成本;而作为用户,不要总想着蹭网啦,免费或虚假Wifi的后面可能有人正抓着包…
那我是不是在登录的时候进行抓包,把返回的相关信息进行捕捉,得到上面的Auth之后,我也可进行想要的操作了?
这里的auth是一个身份凭证的抽象,理论上拿到身份凭证自然是可以进行操作的啦~