安全的可下载链接

时间:2017-03-27 08:23:10

标签: php

我正在尝试为经过身份验证的用户提供对其报告的访问权限。 使用以下代码我创建(取决于登录用户)这样的链接:

echo "<a href = 'http://127.0.0.1:8080/reports.php?file=XXXXXX.html'>Download Report Januar</a>";

这是一种保存方式吗?还是有更好的想法?

$dir = '/var/www/html/44ahj34k578adfhq238iqdn7VB/';
$type = 'text/html';


if(!empty($_GET['file']) && !preg_match('=/=', $_GET['file'])) {
    if ($_SESSION['username'] == 'XXXXX') {
            if(file_exists ($dir.$_GET['file']))     {
            makeDownload($_GET['file'], $dir, $type);
        } 
    } else {
        die("sorry, but you are not my type.");
    }
}


function makeDownload($file, $dir, $type) {

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

// File permissions:
    // drwxr-xr-x 2 www-data root      4096 Mar 27 10:12 44ahj34k578adfhq238iqdn7VB
    // -rw-r--r-- 1 www-data root 5056 Mar 27 10:13 XXXXX.html

1 个答案:

答案 0 :(得分:0)

我注意到一些安全问题:

  • 您希望通过https提供下载链接。
  • 您不希望根据基本未经检查的$ _GET变量链接到任何文件。
  • 您可能希望进一步将用户限制为某些文件,而不是授予他们打开权限以下载给定目录中的任何文件。