PHP中的跨域变量iframe

时间:2013-09-07 23:39:40

标签: php javascript jquery html iframe

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

我的客户使用他们自己的服务器B(我无法控制)在他们的网页上显示一个IFRAME(命名为原始页面),调用我的服务器一个显示客户信息的页面。

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

此设置有效,但对于需要在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

任何帮助?

2 个答案:

答案 0 :(得分:0)

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

然后将javascript放在iframe内容中以获取iframe的src值(来自您的服务器),javascript应该抓取id值的帧(您应该为它定义)并获取网址那样。

请查看此stackoverflow问题中的答案:How to get variable from parent url or parent iframe?

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

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

答案 1 :(得分:0)

我会推荐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;
?>

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