保证跨域window.opener调用的初始(父URL)通过对服务器的初步CORS调用

问题描述 投票:0回答:2

我的第一个问题在这里。

这里是任务。我有一个按钮想要放在第三方网站上。当用户单击该按钮时,将通过javascript window.open方法打开一个新窗口。在该窗口中,用户被重定向到我的Web应用程序,并且必须登录。现在,我如何确定用户来自何处(例如,他单击了哪个网站)。基本上我想要两件事-确保我可以跟踪弹出窗口打开时单击该按钮的网站,并且还确保只有订阅者才能使用该按钮(第一个条件将使它成为可能,因为我将能够过滤掉该按钮基于URL的未经授权的请求)。

显然window.opener无效,因为它是跨域的,浏览器不允许使用。

[我的一个想法是,在页面加载时使用脚本中的CORS请求,这将调用我的服务器,服务器将生成一些秘密并设置cookie,然后返回另一个包含window.open调用的javascript代码以及该秘密作为参数,另一个参数将从document.location分配值(这基本上会将当前URL设置为参数)。从理论上讲,这应该确保从我的服务器合法地收到了名为popup的脚本-因此它提供的URL是正确的。否则,如果有人创建自己的脚本来调用我的弹出窗口-他们当然可以将所需的任何URL设置为参数,但他们将不知道正确的cookie秘密。

[请让我知道我的方法是否正确,不能被黑客入侵或是垃圾?还有没有更好的方法可以做到这一点?

我已经研究和思考了几天,它伤了我的大脑。

预先感谢大家-感谢您的帮助。

javascript cookies cross-domain jsonp
2个回答
0
投票
document.referrer;

您可以将其保存在变量中并重定向。

就Cookie而言,如果第三方表示不同的域,则不能跨域访问Cookie。


0
投票
因为window.open调用了另一个域-window.opener和document.referrer无法使用。

这里的唯一方法是在此处描述的窗口之间使用消息发送机制(Web消息传递):http://en.wikipedia.org/wiki/Web_Messaging

看来所有主流浏览器现在都支持此功能。

它允许将消息发送到具有不同域的另一个窗口并设置期望的域,因此在接收窗口中,您还可以设置可以从中接收消息的期望的域-通过这种方式,您可以确定该特定域已发送了消息,并且可以保证打开器的URL。

© www.soinside.com 2019 - 2024. All rights reserved.