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 相关文章推荐
ajax中get和post的说明及使用与区别
Dec 23 Javascript
Javascript 判断是否存在函数的方法
Jan 03 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
Jul 09 Javascript
JS中操作JSON总结
Dec 06 Javascript
JS之相等操作符详解
Sep 13 Javascript
jQuery轻松实现无缝轮播效果
Mar 22 jQuery
JavaScript事件处理程序详解
Sep 19 Javascript
详解50行代码,Node爬虫练手项目
Apr 22 Javascript
Vue中util的工具函数实例详解
Jul 08 Javascript
vue实现购物车功能(商品分类)
Apr 20 Javascript
jquery实现简单每周轮换的日历
Sep 10 jQuery
MutationObserver在页面水印实现起到的作用详解
Jul 07 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
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
zend framework重定向方法小结
2016/05/28 PHP
php实现每日签到功能
2018/11/29 PHP
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
利用JS轻松实现获取表单数据
2016/12/06 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
基于hover的用法实例(推荐)
2017/07/04 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
django model object序列化实例
2020/03/13 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
经济系大学生求职信
2013/10/01 职场文书
求职信范文英文版
2014/01/05 职场文书
力学专业求职信
2014/07/23 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers