脚本重定向即使有效


Script Redirecting Even when valid

这是一个小脚本,如果有人来自不同的页面,它应该重定向,但它不起作用。它不断重定向到表单页面。

这是代码

<?php
define('FORM', 'form.html');
$referer = $_SERVER['HTTP_REFERER'];
// this keeps redirecting even when I came by submiting the form to this page
if ( $referer != FORM ) {
   header('Location: ' .FORM);
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Testing 123</title>
</head>
<body>
  <?php
        $name  = $_GET['name'];
        $surname  = $_GET['surname'];
        echo 'hello'. $name. 'nice to see you here mr' .$surname;
    ?>
</body>
</html>

您可以通过检查是否发送了某个$_POST变量来测试用户是否来自"表单页面"。例如,你可以尝试类似的东西

if(isset($_POST['somehiddenvalue']) && $_POST['somehiddenvalue'] == $hiddenVal) {
   // ok.
} else {
   // redirect
}

用户仍然可以操作Post变量,请记住这一点。

我想是什么给你带来了麻烦,是你在调用header():后没有退出脚本

header('Location: ' . FORM);
exit;

无论如何,您应该考虑检查所需的参数,而不是依赖$_SERVER['HTTP_REFERER'],因为在用户的浏览器中发送引用者信息可能会被禁用。

isset($_GET['name']) : $name = $_GET['name'] ? $name = null;
isset($_GET['surname']) : $surname = $_GET['surname'] ? $surname = null;
if (empty($name) || empty($surname)) {
    header('Location: ' . FORM);
    exit;
}

此外,在输出$_GET['name']$_GET['surname']之前,您应该对其进行转义!