【问题标题】:PHP prevent direct access to file but still use in download scriptPHP 阻止直接访问文件但仍在下载脚本中使用
【发布时间】:2017-08-06 02:32:54
【问题描述】:

我有简单的下载脚本(用于 Wordpress 文件下载

if($filesize) {
        header('Content-Type: application/octet-stream');
        header("Content-Transfer-Encoding: Binary"); 
        header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); 
        readfile($file_url);
    } else {    
        echo '<p>No file found</p>';
    }

我想阻止用户通过直接访问下载文件来访问它们,所以如果用户在浏览器中输入路径,文件应该是不可访问的。

我已经用 .htaccess 试过了,但没有结果。它直接阻止了文件,但脚本也不会下载文件。

有什么帮助吗?

谢谢!

【问题讨论】:

  • $_SERVER['HTTP_USER_AGENT'] 可以帮忙
  • 只需将要访问的文件存储在您正在运行的 HTTP 服务器无法访问的目录中。
  • 在这种情况下这是不可能的,我将所有内容都存储在一个文件夹中(受保护的文件而不是受保护的)

标签: php file


【解决方案1】:

如果文件与 PHP 脚本在同一个盒子上,请将它们移出网络服务器目录,以便脚本可以访问它们,但用户不能。

【讨论】:

  • download.php 脚本与要下载的文件位于不同的位置,不同的文件夹。
【解决方案2】:

我会假设用户需要点击某个按钮来获取文件,这意味着一个 post 方法,如果不是从 post 你显示主题一个错误消息,

if($_SERVER['REQUEST_METHOD'] != 'POST'){
   echo 'Error: You cannot access this link Directly';
}

我还假设您将文件放在单独的文件夹中,您可以在其中使用以下规则创建新的 .htaccess 文件:

Order Deny,Allow
Deny from all

【讨论】:

  • 不,用户点击指向download.php?file_id=66的链接,然后download.php提供文件下载。但是,如果用户以某种方式找出它来自哪个文件夹,仍然可以通过浏览器中的直接链接访问它。
  • 你用过.htaccess文件吗?
  • 是的,我尝试过订单拒绝,允许所有人拒绝,但这也阻止了 Wordpress 访问文件,我的脚本也下载了文件,但文件为空......
  • 好的,如果您的文件在一个文件夹中,请使用以下规则创建新的 htaccess:订购拒绝,允许所有人拒绝
  • 是的,我这样做了,但是正如我上面提到的,这也会导致使用脚本访问文件时出现问题
【解决方案3】:

要解决此问题,您可以将脚本文件保存在下载文件和 .htaccess 文件所在的文件夹之外。

这样做用户不能直接访问下载文件,如果用户在浏览器中输入路径,文件将不会被下载。他们只能通过脚本访问文件。

希望这是有道理的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-10
    • 2022-11-28
    • 2011-10-30
    • 1970-01-01
    • 2016-10-24
    • 2020-07-24
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多