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 相关文章推荐
淘宝搜索框效果实现分析
Mar 05 Javascript
IFrame跨域高度自适应实现代码
Aug 16 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
Node.js中调用mysql存储过程示例
Dec 20 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
Jul 14 Javascript
Vue.JS入门教程之列表渲染
Dec 01 Javascript
js 转义字符及URI编码详解
Feb 28 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
Sep 17 Javascript
浅谈webpack组织模块的原理
Mar 10 Javascript
对angularJs中自定义指令replace的属性详解
Oct 09 Javascript
五分钟搞懂Vuex实用知识(小结)
Aug 12 Javascript
vue ant design 封装弹窗表单的使用
Jun 01 Vue.js
详解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
理解php原理的opcodes(操作码)
2010/10/26 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
基于webpack 实用配置方法总结
2017/09/28 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
python中enumerate函数用法实例分析
2015/05/20 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
Python简单I/O操作示例
2019/03/18 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
python 如何设置守护进程
2020/10/29 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
python中if嵌套命令实例讲解
2021/02/25 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
教师专业自荐信
2014/05/31 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
同意转租证明
2015/06/24 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
运动会报道稿大全
2015/07/23 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript