2016-06-13 49 views
0
特定頁面

我有兩個PHP文件:PHP接受GET方法只能從

1.PHP

<?php 

... header("location: 2.php?id=1"); 
?> 

2.PHP

<?php 

... echo $_GET['id']; 

?> 

URL從1.PHP到2.PHP是:http://localhost/2.php?id=1

我的問題。是否有可能驗證方法來自哪裏,只接受來自1.php。但是,如果有人在地址欄中更改ID值,那麼忽略?與$_SERVER['HTTP_REFERER']東西,但我不知道

+0

'HTTP_REFER ER'是正確的答案,但它很容易被客戶欺騙,並且可以被防火牆和代理修改或刪除,所以它是完全不可靠的。另外,你打算如何做這個用戶是坐在你的'2.php'頁面並點擊刷新鍵?作爲一個用戶,我希望能夠工作,但你的想法意味着它不會。對最終用戶不太好。 – Simba

+0

@Simba'HTTP_REFERER'不應該被依賴,這就是爲什麼http://stackoverflow.com/a/6023980/ –

+0

*「是否有可能......並且只有在來自1.php時才接受」* - 是的,與'stripos()'http://php.net/manual/en/function.stripos.php並檢查使用什麼方法。 –

回答

0

簡單的答案是否定的。 $ _SERVER ['HTTP_REFERER']通常被瀏覽器禁用,很容易被欺騙。

你可以做些事情接近你的要求:

<?php 
//1.php 
$id = 1; 
$key = generateKeyBasedOnId($id); 
header("location: 2.php?id=$id&key=$key"); 
?> 

你可以寫generateKeyBasedOnId()功能你想, 但你是誰應該知道的算法唯一的一個。 (例如MD5返回( '我非常祕密' 的$ id '串');?

<?php 
//2.php 
if($_GET['key'] !== generatekeyBasedOnId($_GET['id'])) { 
    //error 
} 
?> 

當然,如果有人複製粘貼網址2.PHP ID = .. &鍵= ..你也可以生成隨機密鑰,將其保存到數據庫中,在2.php中讀取它,如果存在,立即刪除它只能使用一次,但是如果有人抓住你的頭部重定向,他仍然可以(理論上)把它用在不同國家的不同瀏覽器中......

4

是否有可能驗證方法來自哪裏,只接受來自1.php。

不可靠。

但是,如果有人在地址欄更改ID值然後忽略?

找到別的東西來測試。 (例如,這是一個登錄並授權查看帶有該ID的頁面的用戶?)。

+1

洛迪,這是什麼建議編輯?http://stackoverflow.com/review/suggested-edits/12672987 - 編輯:我自己拒絕了它。 –