簡體   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