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

时间:2009-08-01 16:12:17

标签: javascript xss

这个问题是我在thread上提出的问题的更具体描述。基本上,我有一个Web应用程序,我试图使用Twitter的OAuth功能。此应用程序有一个链接,提示用户提供他们的Twitter凭据。当用户单击此链接时,将通过JavaScript打开一个新窗口。该窗口用作对话框。当用户单击该链接时,它们将被重定向到对话框中的Twitter站点。在Twitter网站上,用户可以选择输入他们的Twitter凭据。当他们提供了凭据时,会将其重定向回对话框中我网站上的页面。这是通过一个回调网址完成的,可以为Twitter网站上的应用程序设置。

我要做的就是阅读我打开的窗口的URL。我正在尝试读取URL以检测更改,以便我可以做出相应的反应并在启动页面上写入HTML DOM。但是,每当我尝试读取对话窗口的URL时,都会收到“权限被拒绝”错误。为了隔离并重新创建问题,我创建了以下测试来显示问题。

<html>
  <body>
    <input type="button" value="test" onclick="startTest();" />

    <script type="text/javascript">
      var dwin = null;
      var timeoutID = 0;

      function startTest()
      {
        dwin = window.open("http://www.google.com", "dialog", "height=600,width=800", true);
        timeoutID = setTimeout("timerElapsed()", 1000);         
      }

      function timerElapsed()
      {
        if (timeoutID == 5)
    {
      clearTimeout(timeoutID);
      alert("We're done!");
    }
    else
    {               
      if (dwin != null)
      {
        alert(dwin.location);
      }             
      timeoutID = setTimeout("timerElapsed()", 1000);
    }
      }
    </script>
  </body>
</html>

我如何获得dwin.location?我真的很困惑。我认为这不会那么困难。

感谢您提供任何帮助。

3 个答案:

答案 0 :(得分:1)

简短的回答是,除非你修改策略,否则你将无法做到。

原因很简单,您已经打开了一个新的浏览器窗口。用户可以关注远离您网站的链接,浏览器可能会违反隐私权,让您知道他们所在的网站。如果网址不是来自您的网站,则网址本身就是私人信息。

解决这个问题的方法是,如果窗口弹出窗口是您的站点,则该窗口中的代码可以将子窗口的当前位置发回父窗口。

答案 1 :(得分:1)

不是你问题的答案,但是:

  • 使用弹出窗口,你会得到一些安全限制/问题,因为你正在使用另一个域
  • 取决于您打开它的方式,弹出窗口可能被浏览器的弹出窗口阻止功能阻止
  • 对于用户来说,
  • 弹出窗口真烦人

你有没有办法避免使用弹出窗口?


几天前,我看到这篇关于Twitter和OAuth的博文:Writing A Simple Twitter Client Using the PHP Zend Framework's OAuth Library (Zend_Oauth)

即使您没有使用Zend Framework也不使用PHP,该帖子显示可以使用OAuth在Twitter上进行身份验证,而无需使用弹出窗口: - )


为什么不让用户在点击链接时重定向到Twitter 的认证页面(在当前浏览器的窗口内)?当他们完成身份验证后让他们回到网站上?使用twitter的API可能有办法做到这一点?
实际上,似乎有可能(引用你的另一个问题)

  

在Twitter网站上,用户拥有   选择进入他们的Twitter   证书。当他们提供   他们的凭据,他们被重定向   回到我的网站。这是完成的   通过回调网址可以   为Twitter上的应用程序设置   站点。

您担心用户不会回来的问题是什么?
嗯,如果他们点击这个链接,可能是因为他们想在你的网站上做点什么,不是吗?所以,他们可能会回来!
也许你可以在链接旁边做一个解释,解释它的作用和方式;这可能会帮助他们知道发送到twitter的身份验证页面是正常的; - )

答案 2 :(得分:0)

您无法访问已打开的窗口URL,因为所有浏览器都禁止跨域访问。所以你需要考虑另一种方法。