繁体   English   中英

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

[英]Get IP address of original server in iframe request (PHP)

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

有没有一种方法可以解析Web服务器的地址而不将其放入表单输入数据中?

我不太善于解释这一点,因此,如果造成混淆,我感到抱歉。 但基本上,我希望是这样的,如果我从自己的PC(或与此有关的任何其他PC)中将发布数据欺骗到Server A的页面中,而不是通过我的Web服务器的网站界面欺骗,它将拒绝该请求。

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

我能想到的最好的例子是Googles Drive API,您可以指定请求的来源,如果请求来自其他地址,它将拒绝该请求。 (但显然表格是从客户地址寄出的,这又使我感到困惑)

更新:

使用$ .ajax和jsonp从服务器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查询中检索的会话ID和session_id()值,它们根本不匹配。

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

页面加载时:

<?php
session_start();
?>

在html中:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM