安全问题

现在的移动互联网应用,大多是通过客户端带上数据请求不同动作的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的后面可能有人正抓着包…