前端安全一直是一个蛮严苛的问题,特别如果设计到money更是如此。
了解前端安全,在平时的coding中主动考虑,防范于未然,是一个有追求的程序猿应该做的。
未登录
我们从弱弱的基本开始,第一步当然是登录鉴权了,如果一个需要用户身份鉴权的应用系统没有登录过滤那简直是没法想像的,方案基本都是用户输入用户名
密码、或是三方 openID 授权后在 session 里保存用户此次登录的凭证来确保每次请求的合法性。由于 session有时效限制,所以若用户一段时间未与服务
器交互则会过期重登,当然我们也可以通过把登录凭证存在 cookie 里来自由控制用户登录的有效时间。这个是最基本的鉴权我们就不深入细节。
登录了,但被CSRF
虽然有了登录验证后,我们可以挡掉其他非登录用户的骚扰了,但悲剧的是坏人们还是可以欺骗我们善良的用户,借已登录用户的手来搞破坏。
即 CSRF(Cross-site request forgery)跨站请求伪造。
举个栗子:
有个黑客的网站 h.com,我们的网站 a.com。用户登录了a.com,但被诱点进入h.com(如收到 QQ 消息或邮件传播的h.com 的链接),当用户访问
这个链接时,h.com 上自动发送一个请求到 a.com,由于用户已登录a.com,浏览器根据同源策略,会在该请求上自动附带了 cookie,而前面我们
提到了鉴权是通过 cookie 里的某个 key 值凭证的,所以如若没有判断该请求的来源合法性,我们则通过了该伪造的请求,执行了相应的操作。比如
这个请求是让该用户发一篇日志,或是发微博,或是严重的发起一笔转账。
常见的诸如放一张看不见的图片发起get请求
<img src=http://www.a.com/Transfer.php?toUserId=999&money=1000000>
post 请求会稍微麻烦些,但同样很好实现,可以构造一个表诱导用户点击,也可以直接利用ajax发送post请求。