当前位置:千赢国际官网 > 千赢网页手机版登入 > 8个超实用的jQuery技巧攻略,JSON劫持漏洞攻防原理

8个超实用的jQuery技巧攻略,JSON劫持漏洞攻防原理

文章作者:千赢网页手机版登入 上传时间:2019-08-17

1)禁用右键单击功能

1.缓存变量

  注* 作者发表这篇文章的时间较早,某些方法可能并不是最好的解决方案,但针对这种漏洞进行的攻击还依然可见,如早期的:QQMail邮件泄露漏洞,下面介绍的是对这种攻击原理的介绍。

如果你想为用户节省网站信息,那么开发者可以使用这段代码——禁用右键单击功能。

DOM遍历是昂贵的,所以尽量将会重用的元素缓存。

  不久之前,我写了一篇文章《一个微妙的JSON漏洞》,文中讲到这个漏洞可能会导致敏感信息泄露。针对该漏洞的特点,通过覆盖JavaScript数组构造函数以窃取(暴露)JSON返回数组,而现在大多数浏览器还无法防范这种攻击。

<font><font>$(document).ready(function() {
 //catch the right-click context menu
 $(document).bind("contextmenu",function(e) {     
  //warning prompt - optional
  alert("No right-clicking!");

  //delete the default context menu
  return false;
 });
});</font></font>
// 糟糕

h = $('#element').height();
$('#element').css('height',h-20);

// 建议

$element = $('#element');
h = $element.height();
$element.css('height',h-20);

2.使用’On’

  然而,通过和微软的Scott Hanselman交流,我了解到另外一个方法可能会影响更多的浏览器。在上周的挪威开发者大会上,我做了一个针对Json劫持漏洞的演示。

2)使用jQuery设定文本大小

在新版jQuery中,更短的 on(“click”) 用来取代类似 click() 这样的函数。在之前的版本中 on() 就是 bind()。自从jQuery 1.7版本后,on() 附加事件处理程序的首选方法。然而,出于一致性考虑,你可以简单的全部使用 on()方法。

  在我进一步讲之前,我先说一说,这个漏洞可能带来的影响。

使用这段代码,用户可根据需求重新设定文本尺寸(增加或减少)。

// 糟糕

$first.click(function(){
    $first.css('border','1px solid red');
    $first.css('color','blue');
});

$first.hover(function(){
    $first.css('border','1px solid red');
})

// 建议
$first.on('click',function(){
    $first.css('border','1px solid red');
    $first.css('color','blue');
})

$first.on('hover',function(){
    $first.css('border','1px solid red');
})

3.链式操作

  在以下条件下,会出现这个漏洞:首先暴露JSON服务,并且该服务会返回敏感数据;返回JSON数组;对GET请求做出响应;发送这个请求的浏览器启用了JavaScript并且支持_defineSetter_方法。

<font><font>$(document).ready(function() {
 //find the current font size
 var originalFontSize = $('html').css('font-size');

 //Increase the text size
 $(".increaseFont").click(function() {
  var currentFontSize = $('html').css('font-size');
  var currentFontSizeNumber = parseFloat(currentFontSize, 10);

  var newFontSize = currentFontSizeNumber*1.2;
  $('html').css('font-size', newFontSize);
  return false;
 });

 //Decrease the Text Size
 $(".decreaseFont").click(function() {
  var currentFontSize = $('html').css('font-size');
  var currentFontSizeNum = parseFloat(currentFontSize, 10);

  var newFontSize = currentFontSizeNum*0.8;
  $('html').css('font-size', newFontSize);
  return false;
 });

 // Reset Font Size
 $(".resetFont").click(function(){
 $('html').css('font-size', originalFontSize);
  });
});</font></font>

jQuery实现方法的链式操作是非常容易的。下面利用这一点。

  如果我们不使用JSON发送敏感数据,或者只对报文请求做出响应,那么我们的网站就不存在这个漏洞。

3)在新窗口打开链接 

// 糟糕

$second.html(value);
$second.on('click',function(){
    alert('hello everybody');
});
$second.fadeIn('slow');
$second.animate({height:'120px'},500);

// 建议

$second.html(value);
$second.on('click',function(){
    alert('hello everybody');
}).fadeIn('slow').animate({height:'120px'},500);

4.熟记技巧

  我不喜欢用流程图展示这个过程,我会尽量用图表描述。在第一页截图上,我们可以看到不知情的受害者登陆漏洞网站,漏洞网站返回了一个身份认证的cookie。

使用这段代码会帮助用户在新窗口打开链接,为用户带来更好的用户体验。 

你可能对使用jQuery中的方法缺少经验,一定要查看的文档,可能会有一个更好或更快的方法来使用它。

图片 1

$(document).ready(function() {
 //select all anchor tags that have http in the href
 //and apply the target=_blank
 $("a[href^='http']").attr('target','_blank');
});
// 糟糕

$('#id').data(key,value);

// 建议 (高效)

$.data('#id',key,value);

5.避免通用选择符

  我们都可能收到过一些垃圾邮件,邮件中附有链接,发送者声称这有一段搞笑视频。这些大量的垃圾邮件都是一些别有用心的人发的。

将通用选择符放到后代选择符中,性能非常糟糕。

图片 2

$(document).ready(function() {
 $("a.cssSwap").click(function() { 
  //swap the link rel attribute with the value in the rel    
  $('link[rel=stylesheet]').attr('href' , $(this).attr('rel')); 
 }); 
});

5)返回到顶部链接

此代码对于长时间点击单页面非常实用,你可以在重要关头点击“返回顶部”功能。 

$(document).ready(function() {
 //when the id="top" link is clicked
 $('#top').click(function() {
  //scoll the page back to the top
  $(document).scrollTo(0,500);
 }
});

6)获取鼠标指针的X / Y轴

<font><font>$().mousemove(function(e){
    //display the x and y axis values inside the P element
    $('p').html("X Axis : "   e.pageX   " | Y Axis "   e.pageY);
});</font></font>

7)检测当前鼠标坐标 

使用这个脚本,你可以在任何网络浏览器获取鼠标坐标。 

$(document).ready(function() {
$().mousemove(function(e)
{
$('# MouseCoordinates ').html("X Axis Position = "   e.pageX   " and Y Axis Position = "   e.pageY);
});

8)图片预加载

此段代码帮助用户快速加载图片或网页页面。

<font><font>jQuery.preloadImagesInWebPage = function() 
{
     for(var ctr = 0; ctr<arguments.length; ctr  )
{
jQuery("").attr("src", arguments[ctr]);
}
}
To use the above method, you can use the following piece of code:
$.preloadImages("image1.gif", "image2.gif", "image3.gif");
To check whether an image has been loaded, you can use the following piece of code:
$('#imageObject').attr('src', 'image1.gif').load(function() {
alert('The image has been loaded…');
});</font></font>

如果你想为用户节省网站信息,那么开发者可以使用这段代码禁用右键单击功能。 fontfont$(document).ready(function() {//ca...

// 糟糕

$('.container > *'); 

// 建议

$('.container').children();

6.避免隐式通用选择符

  但是实际上,这些链接指向的是那些坏家伙自己网站。当我们点击了链接,接下来的两个步骤会迅速进行。第一,我们的浏览器向这些网站发送请求。

通用选择符有时是隐式的,不容易发现。

图片 3  

// 糟糕

$('.someclass :radio'); 

// 建议

$('.someclass input:radio');

  第二,那些网站会响应一些包含JavaScript的HTML。这些JavaScript会带一个script标记。当浏览器检测到script标记,它就会向那些漏洞网站再发一个下载脚本的GET请求,携带着身份验证的cookie。

DOM遍历是昂贵的,所以尽量将会重用的元素缓存。 // 糟糕h = $('#element').height();$('#element').css('height',h-20);// 建议$element = $('#eleme...

图片 4

  这样,那些坏家伙就伪装成了受害者的浏览器,利用其身份发出了一个包含敏感数据的JSON请求。接着,把JSON加载为可执行的JavaScript,这样以来,那些黑客就能够获取到这些数据。
为了加深理解,我们可以看看一个攻击的实际代码。假如漏洞网站返回带有敏感数据的JSON响应通过如下方式发送:

[Authorize]
publicJsonResultAdminBalances(){
    varbalances=new[]{
        new{Id=1,Balance=3.14},
        new{Id=2,Balance=2.72},
        new{Id=3,Balance=1.62}
    };
    returnJson(balances);
}

  需要说明的是,上面的演示不是专门针对ASP.NET或者ASP.NET MVC,我仅仅是恰巧用ASP.NET MVC来演示这个漏洞而已。
假如这是HomeController的一种方法,我们通过对/Home/AdminBalances发送了一个GET请求,并且返回如下JSON文本:

本文由千赢国际官网发布于千赢网页手机版登入,转载请注明出处:8个超实用的jQuery技巧攻略,JSON劫持漏洞攻防原理

关键词: 千赢国际官网 千赢国际qy966