如何在网络服务器上保护文件? 希望他们只能由经过身份验证的用户下载 我如何阻止某人输入文件URL并仅下载它而不进行身份验证。 举例来说-一个用户下载了文件-也许您有一个控制器 会检查auth并使用以下url将文件流式传输给他们: 即:site.com/controller/download/filename 什么可以阻止人们直接不通过身份验证就这样做: site.com/files/filename.ext
直接指向文件的链接实际上会绕过整个Web框架,而只是下载文件。
也许我在这里缺少基本知识-但是如何做到这一点并使文件保持私有?
谢谢!
答案 0 :(得分:1)
根据唯一的加密ID对文件执行下载操作,如下所示。每个文件都应输入到 file 表中,该表将保存文件名,原始名称,上传者,uuid等数据,根据该数据,您可以将限制应用于下载操作。如果只希望登录用户能够下载文件,则还应该为下载操作定义access rule。
public function actionDownload($id)
{
$file = File::findOne(['uuid'=>$id]);
if($file!=null)
{
$path = UPLOAD_BASE_PATH.'/'.$file->name;
if (file_exists($path) && !is_dir($path)) {
return Yii::$app->response->sendFile($path,$file->original_name);
}
}
throw new NotFoundHttpException("File not found");
}
答案 1 :(得分:0)
如果您不希望人们允许通过直接链接访问文件,则应将文件保存在Web根目录之外。
在yii2中,您的Web根目录位于/web
文件夹中,并且该文件夹应设置为Web的文档根目录。这将使服务器将所有请求指向该服务器,以防止尝试直接访问/web
文件夹之外的文件。
有关更多信息,请参见apache docs。
如果必须将文件夹放在可以直接访问它的位置,则可以使用.htaccess阻止对文件夹的任何直接访问。这个问题的答案是:Deny access to one specific folder in .htaccess