使用jQuery.append()、jQuery.html()方法时,如果其中内容包含<script>脚本而没有经过任何处理的话,会执行它。

简单的示例代码如下:

var xssStr = '<script>console.log(1)</script>';
$('#test').html(xssStr);

控制台会打印出“1”。

同样的情况也存在于jQuery.append(),因为jQuery.html()内部也是调用jQuery.append()。

既然会存在执行<script>脚本的情况,那么就会有xss风险。

解决办法也很简单,将需要作为参数的字符串进行转义:

var xssEscapeStr = xssStr.replace(/</g, '&lt;').replace(/>/g, '&gt;');

这样输出在页面上的只是单纯的一段<script>字符串,并未执行。

但这并不是jQuery的一个bug,查看jQuery源码,jQuery.append()对于<script>的处理似乎是有意为之。

jQuery文档上是这样解释的:

By design, any jQuery constructor or method that accepts an HTML string — jQuery().append().after(), etc. — can potentially execute code. This can occur by injection of script tags or use of HTML attributes that execute code (for example, <img onload="">). Do not use these methods to insert strings obtained from untrusted sources such as URL query parameters, cookies, or form inputs. Doing so can introduce cross-site-scripting (XSS) vulnerabilities. Remove or escape any user input before adding content to the document.

jQuery.append()等方法在设计的初衷就考虑到了允许执行其中的脚本,所以,jQuery不建议使用如URL、cookie、input输入等内容作为append()的参数。

如果实在有需求,那就转义吧。。。^_^

所谓jQuery.append()、jQuery.html()存在的XSS漏洞的更多相关文章

  1. [转]jquery append 动态添加的元素事件on 不起作用的解决方案

    用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...

  2. jquery append()详解

    1 http://www.365mini.com/page/jquery-append.htm 2 http://blog.csdn.net/chaiyining007/article/details ...

  3. jQuery append xmlNode 修改 xml 内容

    jQuery append xmlNode 修改 xml 内容 http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/04/29/jqu ...

  4. jQuery DOM XSS漏洞

    jQuery DOM XSS漏洞http://automationqa.com/forum.php?mod=viewthread&tid=2943&fromuid=21

  5. jquery append

    将已经存在的一个dom对象A,通过jquery append插入另一个dom对象B,将会改变dom树结构--即A成为了B的子元素. 举个例子: js: $(".table-container ...

  6. jquery append 动态添加的元素事件on 不起作用的解决方案

    用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...

  7. 处理jQuery append加入的元素 绑定事件无效的方法

    通过jquery append(或者before.after,一样)新添加进网页的元素,常用的事件不能触发,比如:append了id 为 abc 的元素,那么 $(#abc).click(functi ...

  8. jquery append 动态添加的元素绑定事件on

    用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...

  9. 用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?

    用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...

随机推荐

  1. 2017北京网络赛 Bounce GCD加找规律

    题目链接:http://hihocoder.com/problemset/problem/1584 题意:就是求一个小球从矩阵的左上角,跑到矩形的右下角不能重复经过的格子,小球碰到墙壁就反射. 解法: ...

  2. 四、Springboot Debug调试

    描述: 在使用maven插件执行spring-boot:run进行启动的时候,如果设置的断点进不去,要进行以下的设置. 1.添加jvm参数配置 在spring-boot的maven插件加上jvmArg ...

  3. 第一个Django项目:HelloWorld

    OS:Windows家庭中文版, Python:3.6.3,Django:2.0.3 在前一篇文章中,Django已经顺利安装到了Python中,下面,开发第一个Python项目吧! 1.django ...

  4. Scala中“=>”用法及含义

    => has several meanings in Scala, all related to its mathematical meaning as implication. 1. In a ...

  5. Dropout caffe源码

    GPU和CPU实现的不一样,这里贴的是CPU中的drop out 直接看caffe里面的源码吧:(产生满足伯努利分布的随机数mask,train的时候,data除以p,...... scale_ = ...

  6. C++ : Boost : Rational 有理数类

    因为一些不为人知的原因, 我需要一些能减少我程序误差的东西.于是找到了这个类. 然后下载了Boost这个庞大的库. 安装与配置 在官网上找到下载地址, 大概有71MB, 下来来解压到任意位置就好了. ...

  7. OA项目Ioc DI(二)

    依赖注入:属性和构造函数的注入 一个简单的Demo: IUserInfoDal接口: public interface IUserInfoDal { void Show(); string Name ...

  8. mac系统编译安装ImageMagick7.0.1-3

    1.下载源码包: git clone http://git.imagemagick.org/repos/ImageMagick.git 2.编译安装: cd ImageMagick/ ./config ...

  9. jquery省市区三级联动(数据来源国家统计局官网)内附源码下载

    很久很久没有写博了. 今天更新了项目的省市区三级联动数据,更新后最新的海南三沙都有,分享给所有需要的小伙伴们... JQUERY + JSON,无数据库,纯JS代码,无加密,无压缩,可直接使用在任何项 ...

  10. 8-12 Erratic Expansion uva12627

    题意:一开始有一个红气球  每小时后一个红气球会变成三个红气球和一个蓝气球  第k小时 a到b行之间有几个红气球 递归找规律题目 一定要注意涉及指数的时候一定要开long long 数组!!!! #i ...