繁体   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