![](/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.