阻止直接访问行动表格

时间:2013-05-20 02:58:29

标签: php

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

SQL.PHP

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

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

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

有更好的选择吗?

2 个答案:

答案 0 :(得分:0)

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

所以,基本上。

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

因此,$_SERVER['HTTP_REFERER']全局存储您访问的页面的信息,如果您将回显代码放在您的页面中,它将告诉您来自哪个页面。意思是,如果您只输入页面并访问它,它将给出0/false值。

因此,您可以使用它来检测是否有人正在直接键入页面或从您的某个页面进行传递。


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

答案 1 :(得分:0)

应该是if(!isset($_POST['Submit'])。此外,如果您使用method="POST",则不会在浏览器中抛出?action=add之类的参数。 method="GET"做到了。