[英]PHP accept GET method only from specific page
我有兩個PHP文件:
1.PHP
<?php
... header("location: 2.php?id=1");
?>
2.PHP
<?php
... echo $_GET['id'];
?>
從1.php到2.php的URL是: http://localhost/2.php?id=1
我的問題。 是否有可能驗證get方法來自哪里,並且僅在來自1.php時才接受。 但是,如果地址欄中的某人更改了ID值,則忽略嗎? 帶有$_SERVER['HTTP_REFERER']
東西,但我不確定
是否有可能驗證get方法來自哪里,並且僅在來自1.php時才接受。
不可靠。
但是,如果地址欄中的某人更改了ID值,則忽略嗎?
尋找其他可以測試的東西。 (例如,這是已登錄並有權查看具有該ID的頁面的用戶嗎?)。
簡單的答案是否定的。 $ _SERVER ['HTTP_REFERER']通常被瀏覽器禁用,並且容易被欺騙。
您可以根據自己的需要做一些事情:
<?php
//1.php
$id = 1;
$key = generateKeyBasedOnId($id);
header("location: 2.php?id=$id&key=$key");
?>
您可以根據需要編寫generateKeyBasedOnId()
函數,但是您是唯一應該知道該算法的人。 (例如,返回md5('my very secret'。$ id.'string');
<?php
//2.php
if($_GET['key'] !== generatekeyBasedOnId($_GET['id'])) {
//error
}
?>
當然,如果有人復制粘貼URL 2.php?id = ..&key = ...,它仍然可以工作。 您可以將密鑰隱藏到cookie中,但是仍然很容易欺騙。
您還可以生成隨機密鑰,將其保存到數據庫中,在2.php中讀取它,如果存在,請立即將其刪除。 因此該密鑰只能使用一次。 但是,如果有人抓住了您的標頭重定向,他仍然可以(理論上)接受它並在不同國家的不同瀏覽器中使用它...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.