繁体   English   中英

服务器中的安全文件存储

[英]Secure file storage in a server

我有一个求职网站,所以有很多简历上传到服务器并存储在公用的文件夹中。 我只是想知道我可以在Apache,php级别执行哪些安全措施,以阻止未经授权的人员访问其他人的简历。

我有

  1. 禁用目录浏览
  2. 在html中创建了虚假链接,然后在.htaccess中将其映射到另一个位置

..等等

只是想知道是否有一种方法可以完全隐藏出现在浏览器URL中的文件名(可能带有诸如application / pdf ..etc之类的标题并即时读取文件的内容)是否可行?像将它们存储在MySQL DB中一样?

将文件存储在文档根目录之外(因此服务器默认不会将URL映射到该文件根目录),并使用脚本来确认经过身份验证的用户,然后仅将简历的内容流式传输给该用户。

例如...

<?php

session_start();

include 'app.php';

$userAuthenticated = (new Auth)->check($_SESSION['username']);

$file = isset($_GET['file']) ? 
        $_GET['file'] :
        FALSE;

$file = FILES_PATH . DIRECTORY_SEPARATOR . preg_replace('/[^\w.]/', '', $file);

if ($userAuthenticated AND file_exists($file)) {
    readfile($file);
} else {
    header('HTTP/1.1 403 Forbidden');
    echo 'You\'re not authenticated!';
}

这段代码应该给您大致的想法。

切勿在docroot中允许用户上传文件。 这是非常不安全的,因为您要托管其他人提供的内容。

切勿使用用户提供的名称存储用户上传的文件。 想象一下,如果有人上传了somescript.php,您将其命名为这样,并将其保存在docroot中。 任何人都可以执行。

将文件存储在docroot之外,将文件的详细信息(原始名称,mime类型等)保留在数据库中,并使用脚本使用readfile()或类似文件访问它们。 只允许应该访问的用户访问这些文件。

您可以使用.htaccess重写。

在php中,使用标头和readfile()函数,将文件ID更改并存储在mysql db中,然后确保从.htaccess中的所有文件拒绝上传目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM