一个做教育培训的客户发现网站留言区一打开就弹窗跳转到赌博页面,访客投诉了好几个才来排查。原因很直接:有人往留言框里贴了一段恶意代码,系统原样存进数据库,再原样显示给每个访客。网页前端开发的安全话题里,这个叫XSS的漏洞是发生频率最高的,好在防线并不复杂。
XSS是怎么得逞的
原理一句话:把代码当内容存进去,再当代码执行出来。用户输入的内容里混着脚本,页面显示时浏览器分不清是文字还是指令,照单全收地执行。能干的坏事一大串:篡改页面跳转到钓鱼站、偷访问者的登录信息、往访客电脑上挂广告。凡是让用户输入的地方,留言、评论、搜索框、个人资料,都是潜在入口,一个没防住就全线失守。它不需要多高明的技术,一段现成的恶意代码复制粘贴就能发动,这正是它高发的原因——门槛低,收益对攻击者来说却很可观。
前端的三道基本防线
- 输出转义:所有用户输入的内容在页面上显示前,把特殊字符转成无害的文字,这是最核心的一步,多数前端框架默认处理,但框架外的位置经常被漏掉;
- 输入过滤:按字段定规矩,手机号字段只收数字,留言限长度,超范围的直接拒收;
- CSP策略:给页面下一道指令,只允许执行指定来源的脚本,就算漏进来一段恶意代码也跑不起来。
那位培训客户的问题,就是老代码里有个自定义留言模块绕过了框架的默认转义,补上转义加CSP,半天搞定,此后两年没再出事。三道防线里,转义是命门,其余两道是保险,网页前端开发的团队再小,这道题也不能空着。
企业自己能做的检查
不用懂代码也能测:在留言框里输入一串带尖括号的内容提交,刷新后看它显示的是文字还是被吞掉,被吞掉或显示成普通文字才安全;再看页面有没有可疑的外部跳转。这一手测完,全站最常见的漏洞就摸清了大半。每季度测一轮,改版后加测一轮,习惯比工具更可靠,这条适用于安全工作的每个环节。网页前端开发的安全验收,这种土办法值得写进每次改版。
两条建议:新站立项就把用户输入的处理规范写进需求,验收时用上面的土办法实测一遍;发现页面行为异常第一时间让技术人员查,别先删内容了事,恶意代码还在库里等着再显示。比格网络的项目都带转义和CSP的标准配置,用户输入的地方一个都不裸奔,这是底线不是加分项。