Web安全攻防系列[2]-防范XSS

概要

XSS 是代码注入的一种,他注入的目标是前端页面,所以他是前端工程师关注的安全重点。黑客可能由此作为跳板,进而进行网络钓鱼欺诈甚至入侵核心系统。

XSS 萌芽于上世纪 90 年代中期,正名于 1999 年,流行于 2005 年之后。

同源策略

同源策略是由 Netscape 提出的著名安全策略,是浏览器最核心、最基本的安全功能。同源是指的端口、域名、协议都要相同。

XSS 的分类

  • Persistent 持久型
  • Non-Persistent 反射型
  • Dom-Based 类型。注入的代码直接在本地触发,不会传到服务器。

攻击方法

  • Xss 盲打。因为注入代码之前并不知道网站到底有没有 XSS 漏洞,故一般认为网站存在漏洞,然后通过注入代码来检测

防范要点

  • 服务端对于用户提交的数据,一定要进行 HTML 编码再保存,确保 <,> 这样的 HTML 特殊字符被转义。
  • 页面渲染返回前端后,前端为了以防万一,可以在页面 ready 后抢先执行一段 js,去检测用户内容区域(例如帖子内容区)有没有特殊 <script> 这样的标签,如果有则给它转义或剔除掉,防止其执行。 (ps: 这做不到吧,因为如果 js 放到 head 里执行,dom 还没加载完,如果放到末尾执行,则人家内容区域的 js 已经执行了..)
  • 对 ajax 异步提交的数据,都进行一下 encodeURIComponent 编码转义(这里原因是啥呢,你就算转义了,webserver 也会给重新解码成提交的字符的啊)