第三关,HTML实体转义以及注入事件属性

查看源代码,发现除了vlaue=变成了单引号之外,没有什么特别的,去看了看level3.php文件,也没有看到特别的处理。

尝试使用下面的payload进行解题
‘/><script>alert()</script>,发现行不通,再次查看页面源代码

观察第15行,我们的<,>,都被进行了HTML实体转义(Entity Encoding),该知识文章末尾有解释。
所以尝试使用JS中的on事件传递伪协议(Pseudo-protocol)来进行解题。
构造payload
‘onfocus=’javascript:alert(),payload构造原理在文章末尾。
‘,主要是为了闭合value属性中的‘
记得点击输入框,因为Onfocus行为需要获得聚焦。

HTML实体转义(Entity Encoding)
后端或者前端框架在把用户输入的内容输出到HTML页面之前,检测到了危险字符(如<、>、”等),为了防止它们被浏览器当作HTML标签或属性解析,程序把这些特殊字符转换成了对应的HTML实体编码
常见转化
< -> <
> -> >
” -> "
‘ -> '
注入事件属性
在HTML中,许多标签都支持事件属性(例如onfocus表示当元素获得焦点时触发,onclick表示点击时触发。)
onfocus触发条件:输入框必须获得焦点
还有onfocus、onclick、onmouseover等
伪协议(Pseudo-protocol),指的是借助标准URL/URI的协议语法格式(即,协议名:内容),但底层不遵循真实的网络通信协议(如HTTP、HTTPS、FTP),而是由客户端(如浏览器、操作系统)直接在本地解释并处理的一种特殊标识机制
javascript:alert(),前面的javascript,主要用来告诉浏览器“不要发起网络请求,直接执行后续的JS代码。”
所以onfocus=javascript:alert()
相当于点击了输入框之后,就会执行JS的alert()方法,在浏览器弹出提示框
2026年9月2日17:08:18








