当前位置: 首页 > news >正文

理解 白帽子讲web安全 ‘alert(\““ + x + “\“)‘

介绍

在《白帽子讲web安全》的第三章的3.3.6 防御DOM Based XSS中,有下面这段话:

那是不是因为对“$var”用错了编码函数呢?如果改成HtmlEncode会怎么样?继续看下面这个例子:

<script>
    var x = "1&#x22;&#x29;&#x3b;alert&#x28;2&#x29;&#x3b;&#x2f;&#x2f;&#x22; ";
    document.write("<a href=# onclick = 'alert(\"" + x + "\")' > test</a > ");
</script>

服务器把变量HtmlEncode后再输出到<script>中,然后变量x作为onclick事件的一个函数参数被document.write到了HTML页面里。

问题

在上面代码的第三行:onclick = 'alert(\"" + x + "\")' 这句代码看得很迷糊,仔细分析后终于看懂,记录一下。

解决

alert(\"" + x + "\")不可以分开看,它是跟document.write连在一起的。

document.write("<a href=# onclick = 'alert(\"" + x + "\")' > test</a > ");

直接看的话看不出分割,用不同颜色标识一下:

理解 白帽子讲web安全 'alert(\"" + x + "\")'

如图可以看出,该write的参数有三个字符串。再用张图标示一下分割字符串的双引号:

理解 白帽子讲web安全 'alert(\"" + x + "\")'

就是上面显示的这两对双引号。


首先看一下第一部分,蓝色双引号之间的部分:

<a href=# onclick = 'alert(\"

由于\"代表着转义,所以相当于

<a href=# onclick = 'alert("

再看第二部分,也就是x的值

1&#x22;&#x29;&#x3b;alert&#x28;2&#x29;&#x3b;&#x2f;&#x2f;&#x22; 

将html实体还原成字符:

1");alert(2);//"

接着看第三部分,红色双引号之间的部分:

\")' > test</a >

同样由于\"代表着转义,所以相当于

 ")' > test</a >

最后将它们拼在一起,就是:

<a href=# onclick = 'alert("1");alert(2);//"")' > test </a>

//注释掉了后面的双引号,所以等同于

<a href=# onclick = 'alert("1");alert(2);)' > test </a>

分析结束。

相关文章:

  • 一行JavaScript代码 将 HTML实体 转成 字符
  • maven Filtering true 作用
  • mysql sql语句创建一个简单表
  • 禁止 Apache 默认显示网站目录结构 的方法
  • Typecho Fatal error: Using $this when n...
  • 启用CDN 出现pjax动画失效问题 的解决方法
  • Typecho 配置使用 腾讯CDN服务 的简单教程
  • WWW-Basics (HTTP, Training) 最完整的做法
  • Genymotion 拖入apk 提示 invalid filename
  • 屏蔽 手机QQ黄钻官方团队总送礼物 的简单方法
  • 解决 ubuntu18 打开谷歌浏览器时需要输入密码
  • mybatis parametertype可以不填么
  • failed to save password error code -34018
  • Tyecho 完美配置评论回复邮件提醒 的简单方法
  • Ubuntu18.04 用一条命令 快速安装 FBReader
  • C++入门教程(10):for 语句
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • MYSQL 的 IF 函数
  • pdf文件如何在线转换为jpg图片
  • React中的“虫洞”——Context
  • Travix是如何部署应用程序到Kubernetes上的
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 初识 beanstalkd
  • 从零开始的无人驾驶 1
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 机器学习 vs. 深度学习
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 力扣(LeetCode)965
  • 悄悄地说一个bug
  • 如何进阶一名有竞争力的程序员?
  • 如何选择开源的机器学习框架?
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 用mpvue开发微信小程序
  • 仓管云——企业云erp功能有哪些?
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​比特币大跌的 2 个原因
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # 计算机视觉入门
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • $forceUpdate()函数
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (Oracle)SQL优化技巧(一):分页查询
  • (八)Spring源码解析:Spring MVC
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转载)Google Chrome调试JS
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NetCore 如何动态路由
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET与 java通用的3DES加密解密方法