PHP 中的跨域变量 iframe



我的服务器 A 中有一些客户数据。

我的客户拥有自己的服务器 B(我无法控制它)在其网页上显示一个 IFRAME(将其命名为原始页面),调用我的服务器 A 页面,该页面显示有关客户的一些信息。

例如,如果他们的原始页面是 www.serverB.com/theripage.php?var=asdfsddf 并且内部有 iframe,我可以使用 HTTP_REFERER 轻松访问变量 VAR 的内容。因此,实际上我可以显示他们需要的数据。

此设置有效,但对于需要在 url 中包含查询字符串的页面中启动请求的用户来说很复杂。

如何以其他方式将值传递到我的服务器?

如果客户删除 url 中的查询字符串并在其页面中编写此代码:

<iframe src=http://www.serverA.com/index.php?var=asdfsddf></iframe> 

我无法访问同一域策略的 GET 值。

如果我尝试运行

$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']

我只得到没有查询字符串的结果.....所以

http://www.serverA.com/index.php

有什么帮助吗?

我认为您需要将 http://www.serverA.com/index.php?var=asdfsddf 的输出包装在 iframe 中,首先在服务器 A(您的服务器)上。 使用 javascript 和/或 jQuery 让 iframe 的内容扩展到实际页面的宽度和高度。

然后将javascript放在iframe

内容中以获取iframe的src值(从您的服务器),javascript应该通过id值(您应该为其定义)抓取框架并以这种方式获取url。

看看这个堆栈溢出问题中的答案:如何从父 url 或父 iframe 获取变量?

基本上,您要做的是,将结果的内容放在服务器上的iframe中,serverA,而不是当他们将其放在serverB上的iframe中时,实际上它将在2个iframe内。 您可以控制最里面的 iframe,即包含正在显示内容的 iframe。

在服务器上的 iframe 代码中,您可以使用代码(jQuery 和/或 javascript)使 iframe 完全扩展到它的内容,因此,甚至没有人会知道它在 iframe 中。

我会推荐CURL而不是iFrame。Iframe 不安全,数据很容易被篡改。

cURL 执行了 GET 请求来检索页面,但 cURL 也可以使用其他方法,例如 POST 和 PUT。

对于此示例,让我们模拟登录到网站。登录是通过向 http://example.com/login.php 发送具有以下详细信息的 POST 请求来完成的:

<?php
$postData = array(
    'login' => 'acogneau',
    'pwd' => 'secretpassword',
    'redirect_to' => 'http://example.com',
    'testcookie' => '1'
);
curl_setopt_array($ch, array(
    CURLOPT_URL => 'http://example.com/login.php',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $postData,
    CURLOPT_FOLLOWLOCATION => true
));
$output = curl_exec($ch);
echo $output;
?>

您可以轻松地使用正则表达式来获取所需的数据。

最新更新