扫码关注官方订阅号
test
代码如上,当参数input的值为:%26lt%5cu4e00%26gt的时候,点击test文本,弹窗内容为:<一> 想知道,从输入参数到弹窗的整个过程中浏览器是如何对%26lt%5cu4e00%26gt进行顺序解码的?
input
%26lt%5cu4e00%26gt
<一>
学习是最好的投资!
input的值,被URLDecode,变为<\u4e00> 浏览器从服务端获取的页面数据就已经变成了<\u4e00> 此时通过查看页面源码(注意不是页面右键点检查元素)可以看到
URLDecode
<\u4e00>
页面源码
检查元素
<a href="javascript:alert('<\u4e00>');">test</a>
作为URL的href字符串 javascript:alert('<\u4e00>'); 被HTMLEntity解码,变为
javascript:alert('<\u4e00>');
<a href="javascript:alert('<\u4e00>');">test</a>
这一步可以通过在页面上右键点击test链接,选择检查元素,可以看出实际渲染出的dom元素
test链接
执行的其实是一句javascript代码,其中有一个字符串,'<\u4e00>',里面有一个转义字符\u4e00,对其进行逆转义,由前导符\u可知这是一个unicode编码的转义,将这6个字节的字符串'\u4e00'转化为一个实际上占3个字节空间的unicode字符'一',此时整个字符串占用的内存空间为
'<\u4e00>'
\u4e00
逆转义
\u
'\u4e00'
'一'
如果你直接在代码里写成 alert('<一>');,这个字符串的内部存储方式也是这样的
alert('<一>');
由系统将上字节码,翻译为可显示的对应编码的字符,渲染在屏幕上
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
服务端收到请求,进入代码逻辑处理时
input的值,被URLDecode,变为<\u4e00>浏览器从服务端获取的页面数据就已经变成了
<\u4e00>此时通过查看
页面源码(注意不是页面右键点检查元素)可以看到浏览器在渲染的时候
作为URL的href字符串
javascript:alert('<\u4e00>');被HTMLEntity解码,变为这一步可以通过在页面上右键点击
test链接,选择检查元素,可以看出实际渲染出的dom元素点击test链接时
执行的其实是一句javascript代码,其中有一个字符串,
'<\u4e00>',里面有一个转义字符\u4e00,对其进行逆转义,由前导符\u可知这是一个unicode编码的转义,将这6个字节的字符串'\u4e00'转化为一个实际上占3个字节空间的unicode字符'一',此时整个字符串占用的内存空间为如果你直接在代码里写成
alert('<一>');,这个字符串的内部存储方式也是这样的最终渲染alert框时
由系统将上字节码,翻译为可显示的对应编码的字符,渲染在屏幕上