繁体   English   中英

JavaScript-跨站点脚本-权限被拒绝

[英]JavaScript - Cross Site Scripting - Permission Denied

我有一个Web应用程序,正在尝试使用Twitter的OAuth功能。 该应用程序具有一个链接,提示用户输入其Twitter凭据。 用户单击此链接时,将通过JavaScript打开一个新窗口。 该窗口用作对话框。 这样完成:

主页:

<div id="promptDiv"><a href="#" onclick="launchDialog('twitter/prompt.aspx');">Provide Credentials</a></div>

...

function launchDialog(url) {
  var specs = "location=0,menubar=0,status=0,titlebar=0,toolbar=0";
  var dialogWindow = window.open(url, "dialog", specs, true);
}

当用户单击链接时,他们会从hint.aspx页面重定向到Twitter的站点。 在Twitter站点上,用户可以选择输入其Twitter凭据。 提供凭据后,它们将被重定向回我的站点。 这是通过可以在Twitter站点上为应用程序设置的回调URL来完成的。

发生回调时,用户将在对话框窗口中重定向到我的网站上的“ /twitter/confirm.aspx”。 发生这种情况时,我想将“ promptDiv”的内容更新为“您已成功与Twitter连接”以替换链接并关闭对话框。 这用于通知用户他们已成功完成此步骤。 我可以成功关闭对话框窗口。 但是,当我尝试更新HTML DOM时,收到错误消息“错误:拒绝获取属性Window.document的权限”。 为了尝试更新HTML DOM,我尝试在“ /twitter/confirm.aspx”中使用以下脚本:

// Error is thrown on the first line.
var confirmDiv = window.opener.document.getElementById("confirmDiv");
if (confirmDiv != null)
{
  // Update the contents
}                
window.close();

然后,我只是尝试阅读HTML,以查看是否可以通过以下脚本访问DOM:

alert(window.opener.document.body.innerHTML);

尝试执行此操作时,仍然出现“权限被拒绝”错误。 我知道这与跨站点脚本编写有关。 但是,我不知道如何解决它。 我该如何解决这个问题? 我的应用程序结构不正确吗? 将用户重定向回我的网站后,如何更新HTML DOM?

谢谢您的帮助!

当弹出窗口打开Twitter身份验证页面时,您将失去与winodw进行通讯的原始能力,因为其文档域已更改,并且window.opener已被重置。

为了解决SitePen的NetFlix Queued的问题,我使用了一个计时器并轮询了弹出窗口以更改其位置(您可以继续访问)。 如果进入错误页面或成功页面,我知道可以关闭弹出窗口(您可以控制窗口,但不能控制DOM),并更改主页中的内容以反映授权状态。

我们还检查了窗口是否关闭-如果用户未授权并关闭弹出窗口。

我们无法使用回调,因为这是在Adobe AIR中完成的,并且没有服务器可以“回调”,这造成了额外的障碍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM