【问题标题】:Only allow file download with active session仅允许使用活动会话下载文件
【发布时间】:2015-08-31 08:26:33
【问题描述】:

是否可以将我服务器上的文件/目录的首选项设置为不可下载,但如果用户有会话,他可以访问文件并可以下载它们。

我知道我可以用$_SESSION禁用“下载按钮”,例如:

$downloadbutton = "<a href='abc.jpg'>Download</a>";
if($_SESSION["xy"] == "abc"){
    echo $downloadbutton
}

但是可以通过www.url.com/directpath/abc.jpg访问文件

那么如何保护这些文件呢?

【问题讨论】:

    标签: php file session server


    【解决方案1】:

    要更好地控制下载,您可以使用以下功能:

    function makeDownload($file, $dir, $type) {
    
    header("Content-Type: $type");
    
    header("Content-Disposition: attachment; filename=\"$file\"");
    
    readfile($dir.$file);
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以通过检查.htaccess 中的PHPSESSID cookie 来限制直接访问:

      RewriteEngine on
      RewriteCond %{HTTP_COOKIE} PHPSESSID=[^;]
      RewriteRule .* - [L]
      RewriteRule .* - [F,L]
      

      使用 SetEnv 的更好示例:

      SetenvIf Cookie PHPSESSID=[^;] permit
      Allow from env=permit
      Deny from all
      

      【讨论】:

      • 谢谢,我试试这个。
      【解决方案3】:

      如果您想确保下载访问安全,您永远不应该从原始 URL 实际提供文件,请始终使用文件代理。这样用户就永远看不到文件的来源,只能使用您的代理脚本,您可以控制是否可以提供文件。

      如果您环顾四周,已经有大量脚本已经专门编写过。您可以找到其中一个here 并将您的会话验证添加到其中。

      【讨论】:

      • 谢谢,我想我会把这个方法和其他一些方法结合起来:)
      猜你喜欢
      • 1970-01-01
      • 2021-08-17
      • 2010-10-15
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 2011-12-30
      • 2020-06-04
      • 1970-01-01
      相关资源
      最近更新 更多