2016-06-13 54 views
0
特定页面

我有两个PHP文件:PHP接受GET方法只能从

1.PHP

<?php 

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

2.PHP

<?php 

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

?> 

URL从1.PHP到2.PHP是:http://localhost/2.php?id=1

我的问题。是否有可能验证方法来自哪里,只接受来自1.php。但是,如果有人在地址栏中更改ID值,那么忽略?与$_SERVER['HTTP_REFERER']东西,但我不知道

+0

'HTTP_REFER ER'是正确的答案,但它很容易被客户欺骗,并且可以被防火墙和代理修改或删除,所以它是完全不可靠的。另外,你打算如何做这个用户是坐在你的'2.php'页面并点击刷新键?作为一个用户,我希望能够工作,但你的想法意味着它不会。对最终用户不太好。 – Simba

+0

@Simba'HTTP_REFERER'不应该被依赖,这就是为什么http://stackoverflow.com/a/6023980/ –

+0

*“是否有可能......并且只有在来自1.php时才接受”* - 是的,与'stripos()'http://php.net/manual/en/function.stripos.php并检查使用什么方法。 –

回答

0

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

你可以做些事情接近你的要求:

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

你可以写generateKeyBasedOnId()功能你想, 但你是谁应该知道的算法唯一的一个。 (例如MD5返回( '我非常秘密' 的$ id '串');?

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

当然,如果有人复制粘贴网址2.PHP ID = .. &键= ..你也可以生成随机密钥,将其保存到数据库中,在2.php中读取它,如果存在,立即删除它只能使用一次,但是如果有人抓住你的头部重定向,他仍然可以(理论上)把它用在不同国家的不同浏览器中......

4

是否有可能验证方法来自哪里,只接受来自1.php。

不可靠。

但是,如果有人在地址栏更改ID值然后忽略?

找到别的东西来测试。 (例如,这是一个登录并授权查看带有该ID的页面的用户?)。

+1

洛迪,这是什么建议编辑?http://stackoverflow.com/review/suggested-edits/12672987 - 编辑:我自己拒绝了它。 –