做安全红线使用Fortify工具进行扫描时,jquery append会报Cross Site Scripting DOM风险。解决该问题有两种办法。

一、原生dom方式

使用JavaScript原生dom替换append方法,原生dom会忽略<script>标签。比如,下列代码就会报Cross Site Scripting DOM攻击的问题

<div id="jqueryid">
</div>
<script>
$(document).ready(function(){
var val = "<script>console.log('cross site');"
$('#jqueryid').append(val); // console会打印出 cross site
});
</script>

  

修改方案

<div id="jqueryid">
</div>
<script>
$(document).ready(function(){
var val = "<script>console.log('cross site');"
$('#jqueryid')[0].innerHTML = val; // console不再会打印出cross site
});
</script>

在jQuery方法中,初append之外,html、before、after等方法同样存在此跨站点攻击的问题。

二、传入参数特殊处理

我们也可以将传入的参数进行特殊符号转化成html的方式处理。

代码如下

<div id="jqueryid">
</div>
<script>
$(document).ready(function(){
var script = "<script>console.log('cross site');"
$('#jqueryid').append(encodeHtml(script)); // console不会打印出cross site function encodeHtml(value){
return $('<div/>').text(value).html();
}
});
</script>

  

其实在jQuery的官方文档中,存在如下说明。正是解决跨站点攻击的方法所在。

This method uses the browser's innerHTML property. Some browsers may not return HTML that exactly replicates the HTML source in an original document. For example, Internet Explorer sometimes leaves off the quotes around attribute values if they contain only alphanumeric characters.

Additional Notes: 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. 

 

 
 

Cross Site Scripting DOM (XSS) 攻击jQuery append() 的处理方法的更多相关文章

  1. XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)

    本文是 XSS防御检查单的翻译版本 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sh ...

  2. WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))

    跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是指攻击者向被攻击Web 页面里插入恶意html代码,当用户浏览该页之时 ...

  3. 跨站脚本攻击(Cross‐Site Scripting (XSS))

    跨站脚本攻击(Cross‐Site Scripting (XSS)) 跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是 ...

  4. XSS 跨站脚本攻击(Cross Site Scripting)

    xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意 ...

  5. Web安全之XSS(Cross Site Scripting)深入理解

    XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...

  6. 跨站脚本攻击XXS(Cross Site Scripting)修复方案

    今天突然发现,网站被主页莫名奇妙的出现了陌生的广告. 通过排查发现是跨站脚本攻击XXS(Cross Site Scripting).以下为解决方案. 漏洞类型: Cross Site Scriptin ...

  7. Healwire Online Pharmacy 3.0 Cross Site Request Forgery / Cross Site Scripting

    Healwire Online Pharmacy version 3.0 suffers from cross site request forgery and cross site scriptin ...

  8. DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting

    反射型攻击那篇提及到,如何是"数据是否保存在服务器端"来区分,DOM 型 XSS 攻击应该算是 反射型XSS 攻击. DOM 型攻击的特殊之处在于它是利用 JS 的 documen ...

  9. DVWA 黑客攻防演练(十一) 存储型 XSS 攻击 Stored Cross Site Scripting

    上一篇文章会介绍了反射型 XSS 攻击.本文主要是通过 dvwa 介绍存储型 XSS 攻击.存储型 XSS 攻击影响范围极大.比如是微博.贴吧之类的,若有注入漏洞,再假如攻击者能用上一篇文章类似的代码 ...

  10. DVWA 黑客攻防演练(十)反射型 XSS 攻击 Reflected Cross Site Scripting

    XSS (Cross-site scripting) 攻击,为和 CSS 有所区分,所以叫 XSS.又是一种防不胜防的攻击,应该算是一种 "HTML注入攻击",原本开发者想的是显示 ...

随机推荐

  1. Win10 ISS Web服务器安装与部署

    Win10 ISS Web服务器安装与部署 安装 ISS 控制面板-->程序-->启用或关闭 Windows 功能-->Internet Information Services 测 ...

  2. 【剑指Offer】【链表】链表中环的入口结点

    题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. A:创建两个指针,一个pFast一个pSlow指向链头,pFast一次走2步,pSlow一次走1步,如果两个指针必相遇 ...

  3. js 表格分页,ajax请求后台数据前台分页

    $(function(){ var url="后台给的地址"; var shuju=document.getElementById("shuju"); cons ...

  4. vue axios传值到后端报错问题

    原因:axios使用post方法传输数据给后端默认为json格式,会导致跨域问题 原理:qs是查询字符串解析和将对象序列化的库 qs.stringify()   将对象序列化成url的形式,以& ...

  5. VUE学习-基础(基础语法 & 模板语法)

    基础语法 引入vue <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/ ...

  6. 软件离线许可(License)实现原理

    我们经常使用各种开发软件,比如IntelliJ IDEA.Navicat.Visual Studio等,这些软件都有一个特点,就是要收费.一般是我们需要去购买一个许可,然后输入这个许可到软件里就能够使 ...

  7. [node]启动一个简单的node接口

    来自知乎. 需要先安装一个node,安装过程不表. 新建文件: nodeServer.js // 复制这个文件到目录,再输入一下命令: // npm i express // node nodeSer ...

  8. Software--电商平台--Module 5 Order & Payment

    2018-01-10  14:11:30 电商平台 订购和支付 模块 一: 整体示意图 二:构建一个框架来处理 领域模型内部发生的事情--领域事件 IDomainEvent 标识模型中的 Domain ...

  9. WinForm - 自定义控件

    WinForm 自定义控件 --- 系统自带类型属性 引用 https://blog.csdn.net/qq_34059233/article/details/119636338 以SunnyUI为栗 ...

  10. sed编辑器

    sed sed是一个非交互式的流文本编辑器,可实现增删改查,广泛适用于shell脚本中 工作原理 sed每次只从文本或标准输入中读取一行数据,将其拷贝到一个编辑缓冲区,然后对其如同命令一般处理,并显示 ...