前端-基于客户端DOM的XSS代码注入

分为两种情况

postmessage引起的:

这种安全漏洞一般是因为在使用postmessage发送接收消息的时候没有判断origin引起的,当然如果判断了origin还爆出这种问题,可以尝试对消息体进行转码进行规避。

首先可以进行oring的判断,有些情况不用编码就可以符合安全漏洞的扫描规则。

ajax数据请求引起的

可以尝试对消息体进行转码进行规避。

编码方法
function htmlEncodeOut (str){
  var s = "";
  if (str.length == 0) return "";
  //s = str.replace(/ /g, " ");
  //s = str.replace(/&/g, "&");
  s = str.replace(/</g, "&lt;");
  s=s.replace(/%3C/g,"&lt;");
  s=s.replace(/%3c/g,"&lt;");
  s = s.replace(/>/g, "&gt;");
  s = s.replace(/%3E/g, "&gt;");
  s = s.replace(/%3e/g, "&gt;");
  s = s.replace(/%26lt%3B/g, "&lt;");
  s = s.replace(/%26lt%3b/g, "&lt;");
  s = s.replace(/%26gt%3B/g, "&gt;");
  s = s.replace(/%26gt%3b/g, "&gt;");
  //s = s.replace(/\'/g, "&#39;");
  //s = s.replace(/\"/g, "&quot;");
  //s = s.replace(/\n/g, "<br>");
  return s;
};
function dataEncodeOut(data){
  var rel=data;
  var source="";
  if(typeof(rel) == "object"){
      source=htmlEncodeOut(JSON.stringify(rel));
      source=JSON.parse(source);
      rel=source;
  }else if(typeof(rel) == "string"){
      source=htmlEncodeOut(rel);
      rel=source;
  }
  return rel;
};

解码方法
function htmlEncode (str){
    var s = "";
    if (str.length == 0) return "";
    //s = str.replace(/ /g, "&nbsp;");
    //s = str.replace(/&/g, "&amp;");
    s = str.replace(/</g, "%26lt%3B");
    s=s.replace(/%3C/g,"%26lt%3B");
    s=s.replace(/%3c/g,"%26lt%3B");
    s = s.replace(/>/g, "%26gt%3B");
    s = s.replace(/%3E/g, "%26gt%3B");
    s = s.replace(/%3e/g, "%26gt%3B");
    //s = s.replace(/\'/g, "&#39;");
    //s = s.replace(/\"/g, "&quot;");
    //s = s.replace(/\n/g, "<br>");
    return s;
};
function dataEncode(data){
    var rel=data;
    var source="";
    if(typeof(rel) == "object"){
        source=htmlEncode(JSON.stringify(rel));
        source=JSON.parse(source);
        rel=source;
    }else if(typeof(rel) == "string"){
        source=htmlEncode(rel);
        rel=source;
    }
    return rel;
};
postmessage接收消息
window.addEventListener('message', function (event) {
    if(event.origin === 'www.baidu.com'){
      var res = dataEncodeOut(event.data)
      console.log(res)
    }
}
ajax消息请求
$.ajax({
  type: 'POST',
  url: url + '/login',
  contentType: 'application/json',
  data: JSON.stringify(dataJson),
  success: function(data) {
    data = dataEncodeOut(data);
  },
  error: function(e) {
    e = dataEncodeOut(e);
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值