当页面中有用户输入行为并且没有对输入内容进行筛选时,用户完全可以在输入内容中加入一段脚本来获取cookies中信息等等。
如何让自己的web比较安全呢?
如何给自己的web做插值防御呢?
一 . html节点内容或属性的防御
小方法: 对 '<' 、'>'、双引号、单引号、'&' 进行转义等等
二 . 富文本的防御
· 方法:利用cheerio库 (node.js)
官网:https://www.npmjs.com/package/cheerio
npm install cheerio //进行安装
使用方法: 白名单
var xssFilter=function(html){
if(!html) return '';
const cheerio = require('cheerio');
const $= cheerio.load(html);
var whiteList={ //白名单
'img' : ['src'],
'font' : ['color','size'],
'a' : ['href']
};
$('*').each(function(index,elem){
if (!whiteList[elem.name]) {
$(elem).remove(); //过滤掉白名单中没有的标签
return;
}
for (var attr in elem.attribs) { //判断属性是否在白名单中
if(whiteList[elem.name].indexOf(attr) === -1){
$(elem).attr(attr,null); //cheerio中attr方法 ---设为null时就会移除这个属性
}
}
});
};
· 也可以通过第三方插件 比如 https://github.com/leizongmin/js-xss
使用方法:
var xssFilter2=function(html){
if(!html) return '';
var xss = require('xss');
var ret = xss(html,{
whiteList:{ // 白名单
img : ['src']
},
onIgnoreTag : function(){ // 不在白名单内的标签的处理方法
return '';
}
});
return ret;
};