网站首页 > 技术文章 正文
一:html编码
背景:html编码是用于输出html原本的标签的
想在页面上输出div标签,但是如果我在html标签里直接写的话,就会被当成div标签执行,并不会输出在页面上,这个时候我想将他输出在页面上就需要用html编码
XSS中的应用:这种编码的形式可以用来去绕过一些过滤,比如,有些会过滤掉script ,alert,< >这样的危险的符号,这个时候,就可以用Html编码来绕开过滤
比如这里的输出点在scr里,可以闭合双引号,然后写一个onerror事件,将alert(1)进行html十进制编码,这样就避开了输入的过滤,当数据到达输出点时,页面会先解码,这个时候onerror后面就变成了字符串alert(1),但是当图片资源加载失败,触发onerror这个事件时,这个时候这个字符串alert(1),就会当作js代码执行,就会弹窗。我这里用的html的十进制编码,用十六进制也是一样的效果
Html在线编码工具:
https://www.qqxiuzi.cn/bianma/zifushiti.php
二:js编码
XSS应用:一般js的编码用在通过innerHTML输出在html里面,比如var search = “可控点”;
document.getElementById().innerHTML=search;
在script标签中,先将js编码解码,变成字符串<img src=“x” οnerrοr=alert(1)>,,然后就会以字符串的形式输出在html的div标签里,然后当作html代码执行,也就执行了这个语句,成功弹窗
Js解码是用的xss encode插件
三:url编码
背景:http协议中传输参数是key=value这种键值对的形式存在的,如果需要传多个参数,就需要用&进行分割,如name1=value1&name=value2&name3=value3这种形式,如果这个时候,我们的值里包含了&或者=这样的符号,比如name1=value1,其中,value1的值是aaa&b=cc,那么输出的时候就会变成这样:name1=aaa&b=cc,这本来是一个键值对,但是服务器会解析成两个,会造成歧义,为了避免这种情况,对参数进行了url编码。&:%26,=:%3D,编码后就变成了name1=aaa%26b%3Dcc,这样服务器解析时,就还是一个键值对,然后进行Url解码,就会获取到正确的值了。
XSS中的应用:比如说当你的输出点在a标签的href属性中时,对:进行了过滤,这个你输javascript:alert(1)时,:就会被过滤,导致不能执行,这个时候就可以先用html编码成:,再
用url编码将&编码成%26,再输出点浏览器会将html编码解码回:,然后输出在href里,就可以成功弹窗
url编码和解码可以在js控制台使用js语句来进行编码解码:encodeURI(),encodeURIcomponed()
也可以用在线编码工具:
http://tool.chinaz.com/tools/urlencode.aspx
四:base64编码
Base64一般用在a标签和iframe标签中,
<a href="输出点">
</a> <iframe src="输出点" frameborder="0"></iframe>,
如果过滤了javascript<>”’时,就可以考虑base64编码,用data协议
<a href="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==">test</a>
解码后为:<img src=x οnerrοr=alert(1)>
当点击链接时,页面就会以html的方式解析,用base64的方法解码,然后成功结果弹窗。
Base64在线编码工具:https://base64.us/
注:文章转自互联网
- 上一篇: 浏览器的核心原理
- 下一篇: React 19.1 正式发布,调试增强与预渲染
猜你喜欢
- 2025-07-23 跨域问题解决方案:JSONP(跨域怎么解决,jsonp原理叙述)
- 2025-07-23 技术总监说:“每一个v-html,都是一个敞开的XSS后门”
- 2025-07-23 浏览器的同源策略与跨域问题(浏览器同源政策)
- 2025-07-23 资源提示关键词:提升页面加载速度的利器
- 2025-07-23 JavaScript DOM 内容操作常用方法和 XSS 注入攻击
- 2025-07-23 小红书笔记拉取AI改写的抛砖引玉(小红书笔记替换后新的能收录吗)
- 2025-04-27 JavaScript注释:单行注释和多行注释详解
- 2025-04-27 贼好用的 Java 工具类库
- 2025-04-27 一文搞懂,WAF阻止恶意攻击的8种方法
- 2025-04-27 详细教你微信公众号正文页SVG交互开发
- 1519℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 608℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 522℃MySQL service启动脚本浅析(r12笔记第59天)
- 490℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 489℃启用MySQL查询缓存(mysql8.0查询缓存)
- 477℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 457℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 454℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)