在iframe请求中获取原始服务器的IP地址(PHP)

时间:2017-08-06 02:54:05

标签: php html iframe

我知道$_SERVER['REMOTE_ADDR']$_SERVER['HTTP_X_FORWARDED_FOR'] 但这些显然只返回最终用户的地址(浏览器) 我有两个服务器,我从服务器B(Web服务器)调用服务器A上的页面 (通常传递一个表单并从第一个表单发布数据并在iframe中显示) 当然这是跨域的。 我想做一个故障保护,以确保只从网站发送帖子数据,但像隐藏的输入框这样的东西太容易被欺骗。

有没有办法解析Web服务器的地址而不将其放入表单输入数据?

我不是很擅长解释这个,所以我很抱歉,如果它令人困惑。 但基本上,我希望它是如果我从我自己的PC(或其他任何一个)欺骗发布数据到服务器A的页面,但不通过我的网络服务器的网站界面,它将拒绝该请求。

(我不能想到这样做的逻辑方式,因为显然php是服务器端,但网站和表单都是客户端站点。)

我能想到的最好的例子,Googles Drive API,您指定请求的来源,如果请求来自不同的地址,它将拒绝该请求。 (但很明显,表单是从客户地址发布的,所以这再次让我感到困惑)

更新:

使用带有jsonp的$ .ajax从服务器A检索会话ID(如@deymac建议的那样),并将其应用于输入(令牌),但每次调用会话ID时都会更改。

<?php 
header('Access-Control-Allow-Origin: *');
session_start();
$get = (isset($_GET['get'])) ? $_GET['get'] : "";
if ($get == 'session')
{
    echo json_encode(session_id());
}
else
{
    $token = (isset($_POST['token'])) ? $_POST['token'] : "";
    $sessionid = session_id();
    if ($token === $sessionid)
    {
        Processing code in here.
    }
}
?>

回显出从ajax查询和session_id()值中检索到的会话ID,它们根本不匹配。

1 个答案:

答案 0 :(得分:0)

您可以做的一件事,就是让人们更难以绕过您的表单,在表单中设置会话ID

页面加载时:

<?php
session_start();
?>

in html:

<input type='hidden' name='token' value='<?php echo session_id(); ?>'>

提交表单时,请检查会话ID是否与令牌匹配