防止URL访问没有表单提交PHP

时间:2013-06-09 03:13:26

标签: php

假设我们有一个表单,我们允许用户提交一些文本......然后提交表单,将表单传递给另一个页面,我们根据前一页面提交的输入显示结果。现在我们知道这两个网址,所以我们可能会尝试直接访问它们第一个没问题,当转到访问第二页时它将没有参数或者说要给出结果的价值 ??????所以我想阻止用户直接访问到这个页面而不填写表格并从第一页提交。

例如,提交带有文本框名称的表单,然后我们会从数据库中显示该名称的详细信息。网址可能与第二页www.domain.com/page2.php?name=somename

相似

任何想法?

*我们在尝试访问第一页时已经检查过用户登录

4 个答案:

答案 0 :(得分:2)

试试这个......

if(!isset($_GET)){
   header('Location: http://www.backtoyourotherpage.php/');
}

但是我会在你的表单上使用 POST ,这样网址就不会以你展示的方式打印....包含所有单词

然后它会变成......

 if(!isset($_POST)){
   header('Location: http://www.backtoyourotherpage.php/');
}

答案 1 :(得分:1)

此变量具有调用页面的URL ..

$_SERVER['HTTP_REFERER']

您可以检查是否有$ _POST或$ _GET传递的数据,但最好的方法是生成一个随机字符串(或令牌),将其保存在$ _SESSION变量中并在表单中发送,然后比较两次,如果他们匹配继续执行...

答案 2 :(得分:0)

有两种方法可以测试第二页的访问方式:

  • 最简单的一个是,您将始终检查您是否在第二页中获得了所需的POST参数。您可以通过检查$ _POST
  • 中相应字段中是否存在所需的表单值来执行此操作
  • 您还可以检查页面引用,并且只有在用户来自页面A时才允许访问页面B(但请注意,客户端可以欺骗页面引用者)。 Here's an SO question描述如何在PHP页面中获取引用程序

答案 3 :(得分:0)

在第二个php文件的开头使用以下代码。这将检查URL是否被请求为POST。假设你的表单中有POST方法。这将阻止用户直接通过URL访问。

<?php 
    if(!isset($_POST)){
         header("location:someotherpage.php");
    }
?>

但是,当用户从任何其他地方发送POST请求时,这不起作用。  检查单个表单字段和重定向也很好。