PHP限制访问,仅在提交后下载

时间:2012-04-07 20:27:53

标签: php security download

我希望只有在有人使用“注册”表单(提交后)时才能限制下载的访问权限。无法通过复制/粘贴或发布链接访问HTML / PHP。

这是我到目前为止所拥有的: 服务器:服务器上的“下载”文件夹中包含.htaccess文件

<Files download.pdf>
order deny,allow
deny from all
</Files>

网站:在表单上,​​提交后有一个PHP联系表单处理程序,将注册信息发送到电子邮件地址并重定向到“谢谢 - 这是您的下载HTML页。”我在这个html页面上添加了

<META http-equiv="refresh" content="1;URL=http://www.pathtofilehere/signupform.php">
<a rel="nofollow" href="http://www.pathtofilehere/signupform.php"> Get Your Download Now!</a>

“谢谢 - 这是您的下载”页面然后提示自动下载PHP。

<?php
$filename = "download.pdf";
if(ini_get('zlib.output_compression'))ini_set('zli b.output_compression', 'Off');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();
?> 

我在测试仪服务器上,因此无法将“下载”移出根目录。一旦我完成设置,我会将其移出根目录。另一个问题......网站的所有者没有设置数据库。所以登录在这一点上不起作用。在此期间......

我想要发生的事情:只有在“提交”表单后才能下载。现在,我可以通过html页面访问下载。或PHP页面。我在论坛上尝试了Gateway PHP --> Protected File PHP,无法让它发挥作用。我是否可以设置某种参数session,以使其仅对“Signed-Up”人员可见/可访问?

非常感谢。

2 个答案:

答案 0 :(得分:2)

最简单的方法(没有任何类型的登录)将添加一个会话变量,当访问者按下提交并在下载页面中检查存在时,该变量将被设置。

只需添加以下内容:

session_start();
$_SESSION['submitted'] = 'somevalue';

位于处理提交的页面顶部,并且:

session_start();
if (!isset($_SESSION['submitted']))
{
  // do whatever you want to do
  die();    // stop further execution
}

$filename = "download.pdf";
if(ini_get('zlib.output_compression'))ini_set('zli b.output_compression', 'Off');
header("Pragma: public");
....

在您发布的下载脚本的顶部。

但是,当您谈到注册时,您还可以添加允许用户稍后登录以获取文件的功能(如果注册与用户帐户相关)。然后,您将让您的用户登录并检查下载页面顶部的登录用户。

答案 1 :(得分:1)

全局$_POST[]包含仅通过post方法提交的特定表单值。

如果你用一些关于这个变量的检查来包装你的脚本,你可能会得到一个解决方案。

为了安全起见,您可以通过表单广告提交某种哈希值,并将其与预期进行比较。