我有两个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']
的东西,但我不确定
答案 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中读取,如果存在,立即将其删除。所以密钥只能使用一次。但如果有人抓住你的标题重定向,他仍然可以(理论上)接受它并在不同国家的不同浏览器中使用它...