0

我有一个 form.php 至极动作调用 sql.php 文件,如:

SQL.PHP

if ($_REQUEST['action'] == "add") {
}
if ($_REQUEST['action'] == "edit") {
}

我想阻止直接访问,因为用户可以从浏览器 url 调用:http://sql.php?action=add 一种方法是检查是否提交。看起来工作得很好。

if( isset($_POST['Submit']) && ($_POST['Submit'] == "Submit") )
{
echo "direct access not allowed";
}  

有更好的选择吗?

4

2 回答 2

0

应该是if(!isset($_POST['Submit'])。此外,如果您使用method="POST",它不会像?action=add在浏览器中那样抛出您的参数。method="GET"可以。

于 2013-05-20T05:13:48.950 回答
0

使用$_SERVER['HTTP_REFERER']数组来检测是否有人通过在浏览器中输入直接访问您的页面,或者通过使用页面中的链接从您的另一个页面访问您的页面。

所以,基本上。

if($_SERVER['HTTP_REFERER'] == 'about.php'){
//let user do something
}

因此,$_SERVER['HTTP_REFERER']全局存储您访问的页面的信息,如果您在页面中放置 echo 该代码,它将告诉您您来自哪个页面。意思是,如果您只键入页面并访问它,它将产生0/false价值。

因此,您可以使用它来检测是否有人直接键入该页面或来自您的某个页面。


正如其他人已经指出的那样,使用令牌和会话将是一个更好的主意,因为可以操纵这种方法。所以,我建议你谷歌他们

于 2013-05-20T03:00:17.760 回答