直接网址访问被拒绝

时间:2013-01-15 07:49:21

标签: denied

在我的网站成功登录后有下载链接,用户可以下载文件(.pdg)。 我保护此页面检查用户名和密码,现在它正常工作。现在,问题是当有人成功登录然后他可以下载文件,他也可以看到文件绝对路径(驻留该文件),如www.example.com/uploads/test.pdf,下次他可以使用绝对URL下载。我使用.htaccess保护文件夹,在本例中,上传文件夹不显示pdf文件列表。我的意思是当用户尝试访问www.example.com/uploads时,用户无法查看所有文件,但他可以使用此URL下载www.example.com/uploads/test.pdf。简而言之,当用户直接访问pdf它不应该下载时,他只能在登录页面点击该链接后下载。

2 个答案:

答案 0 :(得分:0)

这是一种愚蠢的做法。只是不允许人们在未经过身份验证时访问该文件。

执行此操作的一种简单方法是创建一个PHP页面来检查会话,如果用户未进行身份验证,则会提供不同的页面。

如果我错误地阅读了您的问题并且您实际上想要使用户只能从本地页面访问资源,那么最好的方法(IMHO)就是从本地动态提供数据/网址当被要求时,文件(通常不可访问)。

另一种方法是使用cookie(在指向PDG之前设置它)并在用户访问它之后取消设置它。如果他们在没有cookie的情况下访问它,请重定向它们。

最后,你可以随时使用HTTP_REFERER,但这很容易伪装,并不总是支持。

答案 1 :(得分:0)

进入文件夹上传创建新文件夹文件,在此处移动所有pdf文件,创建新的 .htaccess 文件并添加以下行:

Order Deny,Allow
Deny from all


进入文件夹上传创建文件 download_file.php 并添加以下代码:

if( !empty( $_GET['file'] ) )
{
  // check if user is logged    
  if( is_logged() )
  {
    $file_title= preg_replace( '#[^-\w]#', '', $_GET['file'] );
    $file_name= "{$_SERVER['DOCUMENT_ROOT']}/uploads/files/{$file_title}.pdf";
    if( file_exists( $file_name) )
    {
      header( 'Cache-Control: public' );
      header( 'Content-Description: File Transfer' );
      header( "Content-Disposition: attachment; filename={$file_name}" );
      header( 'Content-Type: application/pdf' );
      header( 'Content-Transfer-Encoding: binary' );
      readfile( $file_name);
      exit;
    }
  }
}
die( "ERROR: you don't have permissions to download." );


现在,您可以使用此URL获取pdf文件:
http://mysite.com/uploads/download_file.php?file=my-file-name