当前位置: 首页 > 面试题库 >

跨站点XMLHttpRequest

鲜于浩淼
2023-03-14
问题内容

我想提供一段Javascript代码,该代码可在包含Javascript的任何网站上运行,但是它始终需要在托管Javascript的服务器上获取更多数据(甚至修改数据)。我知道出于明显的原因有一些安全限制。

考虑xyz.com上托管的index.html,其中包含以下内容:

<script type="text/javascript" src="http://abc.com/some.js"></script>

some.js能够使用XMLHttpRequest将数据发布到abc.com吗?换句话说,因为我们从那里加载了Javascript,abc.com是隐式受信任的吗?


问题答案:

some.js能够使用XMLHttpRequest将数据发布到abc.com吗?换句话说,因为我们从那里加载了Javascript,abc.com是隐式受信任的吗?

否,因为脚本已加载到单独的域,所以它无权访问…

如果您信任数据源,那么JSONP也许是更好的选择。JSONP涉及将新的SCRIPT元素动态添加到页面中,并将SRC设置为另一个域,并在查询字符串中将回调设置为参数。例如:

function getJSON(URL,success){
    var ud = 'json'+(Math.random()*100).toString().replace(/\./g,'');
    window[ud]= function(o){
        success&&success(o);
    };
    document.getElementsByTagName('body')[0].appendChild((function(){
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = URL.replace('callback=?','callback='+ud);
        return s;
    })());
}

getJSON('http://YOUR-DOMAIN.com/script.php?dataName=john&dataAge=99&callback=?',function(data){
    var success = data.flag === 'successful';
    if(success) {
        alert('The POST to abc.com WORKED SUCCESSFULLY');
    }
});

因此,您将需要托管自己的脚本,该脚本可以使用PHP / CURL发布到abc.com域,然后以JSONP格式输出响应:

我对PHP不太满意,但是也许是这样的:

<?php
    /* Grab the variables */
    $postURL = $_GET['posturl'];
    $postData['name'] = $_GET['dataName'];
    $postData['age'] = $_GET['dataAge'];

    /* Here, POST to abc.com */
    /* MORE INFO: http://uk3.php.net/curl & http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html */

    /* Fake data (just for this example:) */
    $postResponse = 'blahblahblah';
    $postSuccess = TRUE;

    /* Once you've done that, you can output a JSONP response */
    /* Remember JSON format == 'JavaScript Object Notation' - e.g. {'foo':{'bar':'foo'}} */
    echo $_GET['callback'] . '({';
    echo "'flag':' . $postSuccess . ',";
    echo "'response':' . $postResponse . '})";

?>

因此,您可以控制的服务器将充当客户端和abc.com之间的媒介,您将以JSON格式将响应发送回客户端,以便JavaScript可以理解和使用…



 类似资料:
  • 问题内容: 我需要从一个网站向另一个域中托管的REST Web服务发出AJAX请求。 尽管这在Internet Explorer中很好用,但是其他浏览器(例如Mozilla和Google Chrome)强加了更加严格的安全性限制,这些限制禁止跨站点AJAX请求。 问题是我无法控制站点所在的域或Web服务器。这意味着我的REST Web服务必须在其他地方运行,并且我无法采用任何重定向机制。 这是进行

  • 问题内容: 我正在尝试使用“ GWT请求”构建器发出“跨站点请求”,但我无法使其正常工作。如您所见,这是一个GWT示例项目的大部分内容,我已经浏览了https://developers.google.com/web- toolkit/doc/latest/tutorial/Xsite 。但是我仍然缺少一些东西。 我在这里发布代码。我在想什么..? 问题答案: 实际上,如果可以在Servlet Re

  • 问题内容: 我有一个现有的jQuery插件,可以进行很多AJAX调用(主要是JSON)。我想知道最快允许它进行跨站点调用的方法,即$ .get和$ .post URL不会来自同一域。 我听说过JSONP,但是想知道是否有人可以给我一个具体的例子来介绍整个过程。如果可能,我希望对脚本进行最少的更改。我应该使用某种proxy.php吗? 感谢您的时间。 问题答案: JSONP将允许您进行跨站点调用。请

  • 只要应用程序获取不受信任的数据并将其发送到客户端(浏览器)而未经验证,就会发生跨站点脚本(XSS)。这允许攻击者在受害者的浏览器中执行恶意脚本,这可能导致用户会话劫持,破坏网站或将用户重定向到恶意站点。 下面我们借助一个简单图表了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。 威胁代理 - 内部/外部用户或管理员发送给系统的不受信任的数据。 攻击者的方法 - 发送不受信任的数据/基

  • 问题内容: 我有一段可捕获JSON数据的JavaScript。在本地执行时,一切似乎都可以正常工作。但是,当我尝试从其他站点访问它时,它不起作用。 这是脚本。 您可以在“ http://mydeveloperpage.com/sandbox/ajax_json_test/ ”中找到完全相同的文件的副本。 任何帮助将不胜感激。 谢谢! 问题答案: 从文档中: 由于浏览器安全性的限制,大多数“ Aja