簡體   English   中英

PHP僅從特定頁面接受GET方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM