常见前端安全

1.跨站脚本攻击,俗称XSS(cross )

  什么是XSS?

    xss是恶意用户将脚本植入到页面中执行而获取相应敏感信息。也就是会在web页面某个节点(文本节点、属性节点)运行。

  XSS攻击的危害包括:

    1.盗用账号等敏感信息

    2.非法转账等

  XSS攻击类型:

    1.反射型。通过一个伪装的url链接进行攻击,利用url的search参数将脚本伪装,当页面获取链接参数进行攻击

    2.储存型。通过表单输入,储存数据库,再在页面读取数据,回显执行脚本进行攻击。

    3.富文本。

  注入点:

    1.html节点内容
      评价输入框输入存储DB后读取

      <div> {content} </div>
      <div> <script></script></div>

    2.html属性
      URL传入src,scr提前关闭引号

      <img src='#{img}' />
      <img src="1" onerror="alert(1)" />
    3.脚本
      提前关闭引号

        <script>
          var data = '#{data}'
          var data = 'hello';alert(0)''
        </script>
    4.富文本编辑
      本质是一段复杂的html,提交

  XSS防御

    1.针对反射型

    2.针对html的脚本注入

//html节点 防御

//对于尖括号“<” ">" 进行转义

//转义时机: 在存入数据库前 或  在读取DB展示前转义

function escapeHtml(str){
    str = str.replace(/&/g, '&'); //这句在先,不然会把&lt的&符号也转了
    str = str.replace(/</g, '<');
    str = str.replace(/>/g, '>');
    return str
}

//html属性 防御
//对于引号 “"” 进行转义

function escapeHtmlProp(str){
    if(!str) return ''
    str = str.replace(/"/g, '&quto;');
    str = str.replace(/'/g, ''');
    str = str.replace(/ /g, ' ');
    return str
}


//以上两种防御方法可以合并为同一个函数方法

  

    3.针对JS的脚本注入

      直接用JSON.stringify(str)

    4.针对富文本的脚本注入

      1)白名单

        

var xssfilter = function (html){
    if(!html) return;
    var cheerio = require('cheerio');
    var $ = cheerio.load(html);
    //设置白名单
    var whiteList = {
        'img': ['src','title']
    }
    $('*').each(function(index,el){
        if(!whiteList[el.name]){
            $(el).remove();
            return;
        }
        for( var attr in el.attribs) {
            if(whiteList[el.name].indexOf(attr) === -1){
                $(el).attr(attr,null)
            }
        }
    })
    return html
}

  

      2)黑名单

    

猜你喜欢

转载自www.cnblogs.com/gongxiansheng/p/10134554.html