我一直在为此奋斗一两天。不只是编码,而是精确地解释情况。我在页面上有一个静态表单,“download-registration.php”,当你提交表单(经验证的CS和SS)时,它会带你到“download-software.php”,你可以在那里下载软件。我不希望“download-software.php”可以从任何地方访问,只需“download-registration.php”,并且只在提交表单后才能访问。这是我遇到的基于会话限制的问题,您可以转到“download-registration.php”并更改URL以进入下载页面。
我想我需要创建一个变量(随机1,65335)?在点击时将该值插入隐藏的输入并确保它与“download-software.php”页面上的值匹配?
我该如何解决这个问题?它需要以这种方式完成还是有更好的方法?非常感谢任何帮助!
答案 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。