【问题标题】:Load page within the page在页面内加载页面
【发布时间】:2010-10-08 13:35:59
【问题描述】:

我是 PHP 和 Javascript 的初学者..

我找到了来自http://cmichaelis.whsites.net/whblog/jquery-extjs-1/example2的链接

里面有一段代码:

function addPanel(location)
{
 tabpanel.add({
       autoLoad: {url: location},
       title: 'More Information...',
       closable:true,
       autoScroll:true
 }).show();
}

使用方法:

<a href="javascript:void(0);"
   onclick="addPanel('loadpage.php?a=http://www.google.com')">
   head over to Google
</a>

我想问的是..loadpage.php的代码是什么?

【问题讨论】:

    标签: php javascript jquery html ajax


    【解决方案1】:

    看起来loadpage.php 可以用来回显www.google.com 的内容,使用file_get_contents

    loadpage.php

    <?php
        // Simplified output - should sanitise $_REQUEST params etc first..
        echo file_get_contents($_REQUEST['a']);
    ?>
    

    loadpage 有效地充当代理,允许您的 javascript 调用不在您自己域中的页面。

    正如@annakata 在 cmets 中指出的那样,上面的代码是非常危险的。该代码说明了代理文件背后的基本思想 - 在生产中,该文件需要确保 $_REQUEST 参数已被清理,例如只接受来自白名单的值。

    same origin policy 是 javascript 的一个安全元素,可阻止您使用 javascript 将域外的内容拉到您的页面上。

    一些网站通过在自己的服务器上调用代理页面(在本例中为loadpage)来解决这个问题,这实际上只是打印出目标网址的内容。由于此代理页面在您的服务器上,这绕过了同源安全问题,并且仍然可以使用来自另一个域的页面内容 - 这里是 www.google.com


    糟糕,我有点愚蠢地没有 RTFA,而只是问题中的代码并假设它可以做什么。 @andynormancx 正确回答了 q 中链接的页面实际上在做什么。

    【讨论】:

    • 就目前而言这非常危险 - 我希望 php 中有一个白名单或一些健全性检查
    • 非常不安全的代码,好吧,把它作为加载页面文件中可能发生的事情的一个例子,但现在更新了答案以突出显示复制和粘贴时的危险,干杯!
    【解决方案2】:

    PHP 页面没有像其他答案中所建议的那样回显 google.com 的内容。它输出一个指向 Google 的 iframe:

    <iframe src="http://www.google.com" width="100%" height="100%" frameborder="no"></iframe>
    

    【讨论】:

    • 那么有什么意义呢?这可以在 JS 中轻松完成,无需额外往返服务器。
    • 不知道是什么意思,看不出有什么效果。
    • 它允许您将您的网站称为“Ajax”!
    • 某些浏览器不允许跨站内容。也许这(因为它来自 HTML 文档而不是动态请求)是为了规避该限制。
    猜你喜欢
    • 1970-01-01
    • 2014-07-21
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多