如何防御XSS攻击

当页面中有用户输入行为并且没有对输入内容进行筛选时,用户完全可以在输入内容中加入一段脚本来获取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;

};

你可能感兴趣的:(如何防御XSS攻击)