危害描述
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
修复方案
该方案是在建立与纯文本xss防御。
一般前端富文本默认自带xss防御
纯文防御的核心标准策略:
无论是开发何种应用程序,我们都有两条基本的安全准则:
过滤输入
转义输出
建议使用:框架自带的过滤器,对输入进行存储。每个输出纯文本输入的内容,当要取出来用的时候,都需要转移输出。
什么是转义?
弱建议使用: 在输入的时候,先过滤,再转义,然后入库。这样不用管输出,避免遗漏,但防御的效果一致。同时也方便,各种平台的数据调用!且减少其它漏洞的产生。
不建议使用:黑名单过滤,xss攻击html标签,也支持HTML事件攻击,使用黑名单是防御不完的。故此,用白名单过滤,方案才可取。
nodejs实践:
导入xss组件
npm install xss
koa的router层进行参数拦截
// 遍历每一个body参数和query参数,防止xss
if (ctx.request.body) {
for (var sign in ctx.request.body) {
// 判断当前是否有值并且判断是否为参数string类型,以免破坏参数类型
if (ctx.request.body[sign] && ((typeof ctx.request.body[sign]) == "string")) {
ctx.request.body[sign] = xss(ctx.request.body[sign]);
}
}
}
if (ctx.query) {
for (var sign in ctx.query) {
// 判断当前是否有值并且判断是否为参数string类型,以免破坏参数类型
if (ctx.query[sign] && ((typeof ctx.query[sign]) == "string")) {
ctx.query[sign] = xss(ctx.query[sign]);
}
}
}