XSS攻击防御主要通过编码阶段和解码阶段实现。编码阶段主要用来过滤危险脚本,从而实现脚本的保存,解码阶段用来还原部分文本,从而实现脚本的显示。
编码阶段:
主要实现类似html特殊字符转义,数据库单引号(一个单引号转三个),单双引号转义,特殊字符转义,注释符号过滤,script标签过滤,iframe标签过滤。
解码阶段:
实现危险脚本过滤,危险属性过滤(所有html标签中的javascript事件过滤),危险标签过滤,跨域脚本过滤。
开源方案:
使用开源项目来实现,encode.js用于编解码,Pure-JavaScript-HTML5-Parser用于解析HTML标签,类似xmlpull工具。
domParse.js=>https://github.com/blowsie/Pure-JavaScript-HTML5-Parser
encode.js=>https://github.com/mathiasbynens/he