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

news/2024/11/29 11:51:19/

分为两种情况

postmessage引起的:

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

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

ajax数据请求引起的

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

编码方法
function htmlEncodeOut (str){var s = "";if (str.length == 0) return "";//s = str.replace(/ /g, "&nbsp;");//s = str.replace(/&/g, "&amp;");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);}

http://www.ppmy.cn/news/872899.html

相关文章

小程序:调用手机的相册

1、需求 点击按钮&#xff0c;调用手机相册选择图片上传 2、解决方案 Button 上加 openType"chooseAvatar"&#xff1b;onChooseAvatar 写方法&#xff0c;必须用button 按钮&#xff0c;更改下样式看不出来就行。 3、代码 //解决方案 // 1、Button 上加 openTy…

数据库简史

数据库简史 ● 一、RDBMS(关系数据库,Relational DBMS) ● 数据库 早期史 1961年,GE(通用电气公司,General Electric Company)的Charles Bachman ,开发了IDS(集成数据存储,Integrated Data Store),这是世界上第一个NDBMS(网状数据库管理系统,Network Database M…

Linux 必掌握的 SQL 命令

数据库和 SQL 在本系列教程中&#xff0c;目前我们使用平面文本文件来存储数据。平面文本文件可能适合相对较少的数据&#xff0c;但它们对存储大量数据或查询该数据没有多大帮助。多年来&#xff0c;为该目的开发了多种数据库&#xff0c;包括分层和网络数据库&#xff0c;但现…

Groovy探索之Gstring

Groovy探索之Gstring Groovy语言里有很多看起来不起眼的小玩意&#xff0c;但使用以后&#xff0c;我们却常常会惊异于它的巨大能量&#xff0c;Gstring就是其中之一。 Java的String对象是我们最最常用的对象&#xff0c;却也是诟病最多的对象。一句话来说&#xff0c;String使…

数据库简史(精简版)

目录 一、RDBMS&#xff08;关系数据库&#xff0c;Relational DBMS&#xff09; 数据库 早期史 1.1 Oracle 简史 1.2 MySQL 简史 1.3 Microsoft SQL Server 简史 1.4 PostgreSQL 简史 1.5 DB2 简史 1.6 Microsoft Access 简介 1.7 SQLite 简介 1.8 Teradata 简介 1.…

SQL语句整理一

文章目录 Postgre/Gauss字符串拼接&#xff1a;数据类型转换&#xff1a;当数字类型小于1时转换为字符类型后小数点前面的0不显示&#xff1a;coalesce函数&#xff1a;随机数random()函数&#xff1a;日期字段截取&#xff1a;将字符串类型的数据“20200308191233”转换成时间…

openGauss暑期2021结项公布!

在经过差不多5个月的披荆斩棘之旅的考核之后&#xff0c;openGauss暑期2021项目已完美收官&#xff0c;共有7个小伙伴在导师的指导下完成了项目结项。 姓名项目导师noodleopenGauss新增一个兼容Oracle的Number自定义类型胡英豪芮琦霖基于openGauss的libpq或者odbc封装一套C接口…

neo4j中的一些常用的cypher语句

neo4j的基本概念&#xff1a; 节点&#xff0c;属性&#xff0c;关系&#xff0c;标签 节点&#xff1a;可以创建一个为空的节点&#xff0c;只有默认内置的id属性。 关系&#xff1a;关系是有方向的&#xff0c;两个节点可存在多个关系&#xff0c;关系上可以数据属性。一个…