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 相关文章推荐
Jquery实现的角色左右选择特效
May 21 Javascript
js中通过父级进行查找定位元素
Jun 15 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
Sep 21 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
Sep 06 Javascript
Javascript生成带参数的二维码示例
Oct 10 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
Dec 27 Javascript
jQuery实现可兼容IE6的滚动监听功能
Sep 20 jQuery
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
Jul 04 Javascript
分享一个vue项目“脚手架”项目的实现步骤
May 26 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 Javascript
细述Javascript的加法运算符的具体使用
Oct 18 Javascript
Webpack5正式发布,有哪些新特性
Oct 12 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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
PHP中each与list用法分析
2016/01/08 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
编写Python CGI脚本的教程
2015/06/29 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
python爬虫请求头的使用
2020/12/01 Python
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
财务经理岗位职责
2013/11/09 职场文书
给物业的表扬信
2014/01/21 职场文书
小学数学国培感言
2014/03/10 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书