使用隐藏输入限制访问

时间:2010-10-12 02:02:23

标签: php

我一直在为此奋斗一两天。不只是编码,而是精确地解释情况。我在页面上有一个静态表单,“download-registration.php”,当你提交表单(经验证的CS和SS)时,它会带你到“download-software.php”,你可以在那里下载软件。我不希望“download-software.php”可以从任何地方访问,只需“download-registration.php”,并且只在提交表单后才能访问。这是我遇到的基于会话限制的问题,您可以转到“download-registration.php”并更改URL以进入下载页面。

我想我需要创建一个变量(随机1,65335)?在点击时将该值插入隐藏的输入并确保它与“download-software.php”页面上的值匹配?

我该如何解决这个问题?它需要以这种方式完成还是有更好的方法?非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

为您提供进程所需的任何内容,以强制他们提交表单,同时向会话添加变量。然后检查下载页面上是否设置了该变量。

我的猜测是,使用您之前基于会话的方法,当表单已加载时,您在会话中设置了某些内容,但是如果要进行处理,则需要在处理它时进行此操作确定他们先提交。

编辑:

display_form.php:

// ... display the form, you don't need to set any $_SESSION here ...

process_form.php

session_start();

// ... process the form ...

$_SESSION['form_processed'] = 1

// ... redirect to download page ...

download_page.php

session_start();

if($_SESSION['form_processed'] != 1) {
    // user never submitted form, reject them ...
} else {
    // user submitted the form, show them the download page
}

答案 1 :(得分:0)

这很常见。您可以在WordPress,CakePHP等大型PHP项目中看到这一点。

有很多方法,基本上你只需要创建一个生成并从你的注册表单传递的有效性令牌。然后,您可以根据逻辑在软件页面上清除此令牌。

您可以使用随机数,md5()uniqid()或其他任何内容。那里还有一个nonce library