2

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

我有

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

..ETC

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

4

3 回答 3

5

将文件存储在文档根目录之外(因此您的服务器默认情况下不会将 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!';
}

这段代码应该给你一个大致的想法。

于 2012-05-29T03:26:15.913 回答
2

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

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

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

于 2012-05-29T03:27:22.560 回答
0

您可以使用 .htaccess 重写。

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

于 2012-05-29T03:25:57.743 回答