我的第一个问题在这里。
这是任务。我有一个按钮,我想把它放在第三方网站上。当用户单击该按钮时 - 通过javascript window.open方法打开一个新窗口。在该窗口中,用户被重定向到我的Web应用程序,并且必须登录。现在,我如何确定用户来自哪里(例如,他点击了哪个网站)。基本上我想要两件事 - 确保我可以跟踪弹出窗口打开时单击按钮的网站,并确保只有订阅者才能使用该按钮(第一个条件将使它成为可能,因为我将能够过滤掉未经授权的请求基于URL)。
显然,window.opener不起作用,因为它是跨域的,浏览器不允许它。
我的一个想法是在页面加载时使用我的脚本中的 CORS 请求,这将调用我的服务器,服务器将生成一些秘密并使用它设置 cookie,然后返回另一个 javascript 代码,该代码将包含 window.open 调用以及该秘密作为参数和另一个参数,该参数将从 document.location 分配值(这基本上会将当前 URL 设置为参数)。从理论上讲,这应该确保调用弹出窗口的脚本是从我的服务器合法接收的 - 因此它提供的 URL 是正确的。否则,如果有人创建自己的脚本来调用我的弹出窗口 - 他们当然可以将他们想要的任何 URL 设置为参数,但他们不知道正确的 cookie 秘密。
请让我知道我的方法是否正确,不会被黑客入侵还是垃圾?还有更好的方法吗?
我已经研究和思考了几天了 - 它伤害了我的大脑。
提前感谢大家 - 任何帮助都值得赞赏。
如果你想知道你的用户来自哪里(哪个网站),请使用
document.referrer;
您可以将其保存在变量中并重定向它。
就 Cookie 而言,如果您所说的第三方是指不同的域,则无法跨域访问 Cookie。
我自己找到了解决方案。
因为 window.open 调用另一个域 - window.opener 和 document.referrer 将不起作用。
这里唯一的方法是在窗口之间使用消息发送机制(Web 消息传递),如下所述:http://en.wikipedia.org/wiki/Web_Messaging
看起来所有主流浏览器现在都支持此功能。
它允许将消息发送到具有不同域的另一个窗口并设置预期的域,因此在接收窗口中,您还可以设置可以从中接收消息的预期域 - 这样您就可以确定该特定域发送了消息并且可以保证打开器的URL。