当前位置:网站首页>一个循环,两个循环问题的思考及复现
一个循环,两个循环问题的思考及复现
2022-08-03 01:03:00 【熬夜且瞌睡】
一个循环

在url中输入img标签
<img src=1 οnerrοr=alert(1)>

执行之后,我们看到src属性消失了,只留下来onerror属性,

分析原因,我们断点执行,一步一步来看。在第一个for里面,el传递的是img标签,而后面的“*” 代表标签内的所有元素,attr代表img标签内的属性,而下图的0和1则代表的索引下标,而后面的el.removeAttribute(attr.name);即删除了img的第一个属性,就是src,为什么onerror没有被删除掉,可以理解为这个删除是按照空间位置来删的。索引为[0]在第一个空间位置,索引为[1]在第二个空间位置,当把第一个空间位置清理出来,删除就会来到第二个空间位置,但因为第一个空间位置为空,原空间二自动填充,及此时所有空间都往前移了一位,则此时若删除空间二的内容,实际删除的是空间三的内容。



如图,按程序的意思应该是从大到小排序,但实际只输出9,7,6,这就是因为当删除9,7,6时,在其后面的元素都会前移,实际一共循环三次,第一次以2为起始元素,第二次是3,第三次是1,三次循环过后,停止循环
当我们输入以下标签,添加一个a=1111
![]()

则只保留了 src属性
为了避免删除标签,我们可以将其设置为,可以进入循环,但让其删除的是无用的属性,我们可以利用之前学的id与name来实现
先进行演示,查看是否可行
<body>
<form id="x"action="">
<img name="attributes">
</form>
</body>
<script>
console.log(window.x.attributes)
</script>

可以看到img标签完整的出现了,这种是利用的删除无用标签,你想删除就删除,我满足你的规则,我在其它地方触发就可以了。但因为要满足可迭代对象的条件,因此<img>标签要写两个,
同时我们要在form里面进行触发,可以加一个自动聚焦的属性:tabindex
最后修改为
<form tabindex=1 onfoucus=“alert(1)” autofocus><input name=attributes><input name=attributes>
但因为时自动聚焦,弹窗会一直出现,我们可以让它执行一次后自动删除
<form tabindex=1 onfoucus="alert(1);this.remove.Attribute('onfocus')" autofocus><input name=attributes><input name=attributes>

另一种不进循环的方式:
使用两个svg标签
原因:
循环执行前就执行恶意属性,若使用一个则在循环结束时也并不会出现弹窗
<svg><svg/οnlοad=alert(1)>

边栏推荐
猜你喜欢
随机推荐
HCIP第十二天_二层MPLS实验
德邦科技通过注册:年营收5.8亿 国家集成电路基金为大股东
开发JSP应用的基础知识
买了一瓶饮料
php提示Array to string conversion
PAT甲级 1051 Pop Sequence
优秀的 Verilog/FPGA开源项目总结及交流群
MySQL删库不跑路
【7.31】代码源 - 【矩阵操作】【宝箱】【New Stone Game】【等差数列】
9-WebUtil工具类.md
开源聚力,共创未来 | 麒麟信安祝贺openKylin首个体验版正式发布!
PHICOMM(斐讯)N1盒子 - Armbian5.77(Debian 9)刷入EMMC
科捷智能冲刺科创板:年营收12.8亿 顺丰与日日顺是股东
Oracle 暴跌,倒下了!
async-await
2149. 按符号重排数组
.NET in-depth analysis of the LINQ framework (four: IQueryable, IQueryProvider interface details)
写一个简单的网站步骤
vue3的keepAlive缓存组件
提高测试覆盖率的四大步骤









