![](/img/trans.png)
[英]How to get the IP address of the server address on which the request came in using php?
[英]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.