如何阻止人们操纵URL以在PHP中提交表单?

时间:2013-08-16 22:59:47

标签: php forms url submit

当用户提交任何表单时,网页会发送$_GET['variable_name'],并会提供如下网址:www.mywebsite.com/index.php?variable_name_here='yes'

然而,人们只需将网址www.mywebsite.com/index.php?variable_name='yes'写入网站的地址栏即可访问此部分脚本,而无需实际提交表单!

这是一个问题!它打破了链接到该表单提交的脚本的特定部分!这是因为与$_GET['variable_name']相关的脚本部分无法获取应该由表单发送的变量,因为它从未提交过!

当他们通过将网址发送回www.mywebsite.com/index.php来操纵网址时,如何阻止他们访问脚本的特定部分?

P.S。 :这是用户通过表格提交的数据,然后处理(没有SQL或任何相似的软件)

2 个答案:

答案 0 :(得分:0)

如果您担心人们在没有登录或没有正确的参数的情况下进入您的网站,您应首先使用isset()检查是否存在正确的$ _GET变量。如果您期望存在的所有参数都允许它们通过,否则使用header('Location: /index.php');强制重定向。

答案 1 :(得分:-2)

要从www.mywebsite.com/index.php?variable_name='yes'重定向到www.mywebsite.com/index.php,您需要在打开HTML标题之前在下面包含以下代码!此解决方案适用于任何$ _GET变量您将整个网站放在includes("filename_here")内,无需更改代码。

//if there are any $_GET variable(s) set (doesn't matter what the name of the variables are)
if (! empty($_GET))
{
    //if there is no record of the previous page viewed on the server
    if(! isset($_SERVER['HTTP_REFERER']))
    {
        //get requested URL by the user
        $redir = $_SERVER['PHP_SELF'];

        //split parts of the URL by the ?
        $redir = explode('?', $redir);

        //redirect to the URL before the first ? (this removes all $_GET variables)
        header("Location: $redir[0]");
    }
}