【问题标题】:deny access from all but accept downloads requests拒绝所有人访问但接受下载请求
【发布时间】:2022-01-03 21:47:59
【问题描述】:

我有一个文章申请网站。

我需要拒绝对这些文件的所有直接访问,但允许在某些页面上进行下载。这些文件是 .pdf

文件的位置是: "./public_html/files"

有没有办法拒绝所有对这些文件的直接访问,但允许从特定按钮下载?

【问题讨论】:

    标签: php html .htaccess


    【解决方案1】:

    您必须在文件系统之上实现一个包装器,并为此目的添加额外的安全性,例如令牌。

    假设你的下载路径是:

    <BASE_URL>/download/{x}

    x 是文件名。如果用户在 url 中提供了有效的令牌,则此路由只会返回来自 ./public_html/files 的文件内容,例如:

    <BASE_URL>/download/{x}?token=diji12jidj

    此方法的所有实现都取决于您的需求,例如令牌可以基于用户会话或基于时间或...

    这里有一个简单的php提示:

    // First page
    session_start();
    
    $_SESSION['download_key'] = random_string() // a function that you can implement in anyway you want
    
    // In you html
    <a href="download.php?name=<FILE_NAME>&download_key=<?= $_SESSION['download_key'] ?>">Download here</a>
    
    
    // File: download.php
    if(isset($_SESSION['download_key']) && $_REQUEST['download_key'] == $_SESSION['download_key']) {
        // find file 
        $path = ... // path to file
        $fp = fopen($path, 'rb');
    
        // send the right headers
        header("Content-Type: image/png"); // or anything else
        header("Content-Length: " . filesize($path));
    
        
        fpassthru($fp);
        exit;
    }
    

    【讨论】:

    • 我该怎么做?你能给我发一个关于“文件系统包装器”的视频或文章吗? IDK 那是什么。
    • 这没什么特别的。你的后端语言是什么?
    • 对不起,我开始了。我正在使用 PHP。
    • 好的。所以你必须在php中开发一个脚本来做到这一点。您可以使用免费的文件共享脚本,也可以自己开发。我无法为您解释所有方面,但我会给您一个简单的解决方案(不完美)。检查我的答案,我会更新它
    猜你喜欢
    • 2011-08-13
    • 2013-09-22
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2015-05-27
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多