我有一个页面,我只想在有人点击表单"submit"时访问。为什么我在输入 URL 时可以访问该页面?

  • 本文关键字:访问 URL submit 只想 有一个 表单 php isset
  • 更新时间 :
  • 英文 :


我有一个名为" booking.inc.php"在一个标记为"私人"的文件夹中。以下是我编写的PHP代码,用于防止某人通过输入URL访问页面,除非他们单击带有"提交"属性的按钮。还有名字"书"……

<?php 
if (isset($_POST['book'])) {
echo "It works!"; 
}   
else {
header("location: ../index.php");
}

HTML页面名为"booking.php">

<!DOCTYPE html>
<html>
<head>
<?php require "header.php" ?>
<title>My Website</title>
</head>
<body>
<form action="private/booking.inc.php" method="post">
<input type="text">
<input type="text">
<button type="submit" name="book">Submit</button>
</form>
</body>
</html>

当我在表单中输入一些文本并点击"提交"时,我只得到一个白页,什么也没有。没有echo语句说,&;It works!&;此外,当我在浏览器中输入路径以访问booking.inc.php时,我也只是得到一个空白的页面,而不是被定向到index.php。

我做错了什么?

这是你要找的吗?如果有人试图访问"booking.inc.php";代码会直接将它们重定向到另一个位置。使用"booking.inc.php"顶部的代码。

if(!isset($_SERVER['HTTP_REFERER'])){
// redirect them to another uri
header('location:../somefile.php');
exit;
}

private"目录

您创建的private目录无论如何都不是私有的。它只是一个子目录。因此,我建议不要选择这个名字。

单模板你有所有的选项,但你可能会考虑不创建一个新的文件。如果您选择这样做,您可以将操作发送到相同的文件,并根据它是GET还是POST请求相应地处理请求。这将在语义上处理预订模板。它甚至可以允许您重新呈现页面,如果某些信息是错误的,并使用先前设置的值重新填充表单,以优雅地处理错误。

重定向我不是100%在这个问题上,但重定向可能是好的;只是它不适用于您的设置。据我所知,当使用localhost时,您可能不会收到任何头信息。

如果你把一个echo "You got blocked";在那里,而不是标题,它应该工作。还有其他的重定向方法,但是在专用的web服务器上应该没问题。

安全如果你认为这个检查会以某种方式保护你的表单提交,你就错了。如果表单被认为是安全的,这个检查是不够的。

由于文件的名称是booking.inc.php我认为它可能会处理一些导致销售的用户操作,因此应该是安全的!如果这是你真正想问的问题,你应该看看在CSRF维基百科文章的预防部分列出的技术。

最新更新