PHP仅从特定页面接受GET方法

时间:2016-06-13 14:15:31

标签: php html validation

我有两个PHP文件:

1.PHP

<?php

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

2.PHP

<?php

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

?>

从1.php到2.php的网址为:http://localhost/2.php?id=1

我的问题。是否有可能验证get方法的来源,并且只接受来自1.php的接受。但如果有人在地址栏中更改id值然后忽略?有$_SERVER['HTTP_REFERER']的东西,但我不确定

2 个答案:

答案 0 :(得分:4)

  

是否可以验证get方法的来源,并且只接受来自1.php的接受。

不可靠。

  

但如果地址栏中有人更改了id值,那么忽略?

找到其他要测试的东西。 (例如,这是一位登录并有权查看具有该ID的页面的用户吗?)。

答案 1 :(得分:0)

简单的答案是否定的。 $ _SERVER ['HTTP_REFERER']经常被浏览器禁用,很容易被欺骗。

你可以接近你的要求:

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

您可以根据需要编写generateKeyBasedOnId()函数, 但你是唯一一个应该知道算法的人。 (例如,返回md5('我的秘密'。$ id。'string');

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

当然,如果有人复制粘贴网址2.php?id = ..&amp; key = ...,它仍然有效。你可以将密钥隐藏到cookie中,但它仍然很容易被欺骗。

您还可以生成随机密钥,将其保存到数据库中,在2.php中读取,如果存在,立即将其删除。所以密钥只能使用一次。但如果有人抓住你的标题重定向,他仍然可以(理论上)接受它并在不同国家的不同浏览器中使用它...