jQuery使用中可能被XSS攻击的一些危险环节提醒


Posted in Javascript onMay 24, 2016

$
我们经常使用向 $ 内传入一个字符串的方式来选择或生成 DOM 元素,但如果这个字符串是来自用户输入的话,那么这种方式就是有风险的。

先看一个 DEMO:http://jsbin.com/duwuzonife/1/edit?html,js,output

$("<img src='' onerror='alert();'>");

当用户输入的字符串是像这样的时,虽然这个 <img> 元素不会马上被插入到网页的 DOM 中,但这个 DOM 元素已经被创建了,并且暂存在内存里。而对于 <img> 元素,只要设置了它的 src 属性,浏览器就会马上请求 src 属性所指向的资源。我们也可以利用这个特性做图片的预加载。在上面的示例代码中,创建元素的同时,也设置了它的属性,包括 src 属性和 onerror 事件监听器,所以浏览器会马上请求图片资源,显然请求不到,随机触发 onerror 的回调函数,也就执行了 JavaScript 代码。

推荐阅读 $ 的官方文档:http://api.jquery.com/jQuery/

类似的其他方法

.after()
.append()
.appendTo()
.before()
.html()
.insertAfter()
.insertBefore()
.prepend()
.prependTo()
.replaceAll()
.replaceWith()
.unwrap()
.wrap()
.wrapAll()
.wrapInner()
.prepend()

以上这些方法不仅创建 DOM 元素,并且会马上插入到页面的 DOM 树中。如果使用 <script> 标签插入了内联 JS 会立即执行。

不安全的输入来源

document.URL *
document.location.pathname *
document.location.href *
document.location.search *
document.location.hash
document.referrer *
window.name
document.cookie

document 的大多数属性都可以通过全局的 window 对象访问到。加 * 的属性返回的时编码 (urlencode) 后的字符串,需要解码才可能造成威胁。

不安全的操作
把可以被用户编辑的字符串,用在以下场景中,都是有隐患的。总体来说,任何把字符串作为可执行的代码的操作,都是不安全的。

1.通过字符串创建函数

(1)eval
(2)new Function
(3)setTimeout/setInterval
2.跳转页面

location.replace/location.assign
修改 <script> 标签的 src 属性
修改事件监听器
总结
如果发生在用 jQuery 时被 DOM-XSS 攻击的情况,大多是因为忽视了两个东西:
1. 在给$传参数时,对参数来源的把控。
2. 用户的输入途径不只有表单,还有地址栏,还可以通过开发者工具直接修改 DOM ,或者直接在控制台执行 JS 代码。

Javascript 相关文章推荐
Js 获取当前日期时间及其它操作实现代码
Mar 04 Javascript
JavaScript Event学习第六章 事件的访问
Feb 07 Javascript
基于jquery的web页面日期格式化插件
Nov 15 Javascript
jQuery数据缓存用法分析
Feb 20 Javascript
JavaScript实现表格快速变色效果代码
Aug 19 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
Nov 24 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
Jul 24 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
Sep 24 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 Javascript
VUE中使用MUI方法
Feb 12 Javascript
JavaScript冒泡算法原理与实现方法深入理解
Jun 04 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 Javascript
详解Node.js模块间共享数据库连接的方法
May 24 #Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
May 24 #Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
May 24 #Javascript
实例解析jQuery中proxy()函数的用法
May 24 #Javascript
jQuery前端开发35个小技巧
May 24 #Javascript
JS+Canvas绘制时钟效果
Aug 20 #Javascript
基于JQuery实现图片上传预览与删除操作
May 24 #Javascript
You might like
图书管理程序(一)
2006/10/09 PHP
destoon之一键登录设置
2014/06/21 PHP
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
深入浅出分析javaScript中this用法
2015/05/09 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
2016/08/16 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
使用axios实现上传图片进度条功能
2017/12/21 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
Python中的文件和目录操作实现代码
2011/03/13 Python
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
用Python编写简单的微博爬虫
2016/03/04 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python 实现dict转json并保存文件
2019/12/05 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
Django的CVB实例详解
2020/02/10 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
四年的个人工作自我评价
2013/12/10 职场文书
大专学生求职信
2014/07/04 职场文书
员工年终自我评价
2014/09/14 职场文书
工作失职造成投诉的检讨书范文
2014/10/05 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
七夕情人节问候语
2015/11/11 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android