2014-01-15 105 views
0

我有一个用户访问我的网站的场景。我打算使用iFrame在另一个域(不是我的控件)中显示另一个站点的iFrame。现在这个网站会显示一个登录页面。客户将登录到此页面。如果登录成功,我想禁用/模糊iFrame并在我的页面上显示一些字段。在我的网站上输入数据后,我将启用iframe并让用户继续。与iFrames交互

我的问题是:我如何捕获iFrame中的登录成功事件?

侧面问题:有没有比使用iFrame更好的方法?

+2

[相同的起源(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript )阻止这样的事情。当“不在我的控制范围内”时没有解决方法; )。 – Teemu

回答

1

您想知道用户何时在另一个网站上登录并模仿登录行为。你描述的是对same-origin policy和实际security break ...

这可以适当地进行的,没有安全的担忧不断上升,如果外部网站将共享登录相关信息(例如,通过OAuth)。然后,您可以只弹出外部网站的登录页面。您的用户将输入他/她的凭据,您将可以正确访问其登录操作状态。

假设外部应用程序是Facebook,你可以在this page上找到额外的信息和例子。 OAuth tutorial for beginners也可能有用。

希望我帮了忙!

0

我不是100%肯定,如果下面是你需要什么,但你可以尝试以下操作:

- 下面是XFO检测的一个简单的例子,没有任何登录检测检查,对几个网站。

<* script src=”http://ajax.googleapis.com/ajax/libs/dojo/1.7.2/dojo/dojo.js”><* /script> 
<* script> 
var urls = [ 
'http://www.wikipedia.org/', 

'http://ha.ckers.org/', 

'http://www.google.com/', 

'http://www.facebook.com/', 

'https://github.com/', 

'http://daringfireball.net/', 

]; 

function detect() { 
dojo.forEach(urls, function(url) { 
var iframe = dojo.create(“iframe”, { src: url, id: url }); 
dojo.attr(iframe, “style”, {display: ‘none’}); 
dojo.connect(iframe, “onload”, function() { 
dojo.destroy(iframe); 
}); 

dojo.place(iframe, dojo.body()); 
setTimeout(function() { 
var obj = dojo.byId(url); 
if (obj) { 
dojo.destroy(iframe); 
var entry = dojo.create(“li”, null, dojo.body()); 
entry.innerHTML = “Yes: ” + url; 
} else { 
var entry = dojo.create(“li”, null, dojo.body()); 
entry.innerHTML = “No: ” + url; 
} 
}, 3000); 
}); 
} 
<* /script> 

更多的方法和上面的访问说明 - http://blog.whitehatsec.com/i-know-what-websites-you-are-logged-in-to-login-detection-via-csrf/