1

我有一个网站存储有关人员的个人数据。所有这些信息都在数据库中,允许访问这些信息的页面受密码保护。但是,最近我不得不保留包含一些此类信息的 PDF 文件。这些 PDF 存储在服务器的文件夹中。我已经index.html在那个文件夹中放了一个,这样就可以防止查找。

但是,我担心这样的网站复印机HTTrack可能会进行递归查找。我无权访问,.htaccess因为托管服务不允许这样做。

如何以安全的方式存储 PDF?我正在使用phpMySQL

4

3 回答 3

2

当他建议您使用 php 脚本将文件内容写入 HTTP 响应而不是直接链接到文件时,它是正确的。

但是,当需要保护敏感文件免受未经授权的访问时,还有一个步骤:将文件移动到服务器上无法从 Web 访问的目录中。我对 php 不太熟悉,所以我将使用一个 asp.net 站点作为示例,但您应该能够很好地跟随。

在 Windows 中,网站的路径可能是C:\inetpub\wwwroot\MyWebsite\Index.html

我会将文件存储在类似C:\WebsiteFiles\这样的地方,这样就无法从网络上访问这些文件。现在您可以通过 php 脚本控制访问,而不必担心人们或脚本猜测文件名。

于 2013-07-12T12:43:40.763 回答
1

首先-请不要对此感到生气-您提出这个问题的事实表明您没有资格编写处理个人信息的软件。即使您正确解决了这个特定问题,您也可能会犯其他错误。我建议花一些时间在OWASP 网站上,并基本了解 Web 应用程序的安全性。

接下来,您不应将 PDF 文件放在可公开访问的 Web 文件夹中。如果有人将 URL(无论文件名经过多么巧妙地散列)转发给不应访问它的人,您的安全模型就会中断。不允许文件枚举是不够的 - 您不应允许任何人在不输入凭据的情况下访问 PDF 文件。

您可以使用 .htaccess 文件最轻松地做到这一点 - 如果您的托管服务提供商不支持,我会质疑他们是否适合托管敏感数据的项目。

如果你真的需要,你可以创建一个“直通”PHP 脚本。因此,如果 URL 为http://myserver.com/personalPDF.php?personID=JoeBlogs,则文件 personalPDF 将使用以下伪代码

if user is not logged in
  redirect to log-in page

if user does not have access to requested document
  redirect to "unauthorized" page

set PDF mime type
read requested document from disk and send to client

在 PHP 中,最后两行类似于:

<?php
$file="JoeBlogs.pdf";
header('Content-disposition: attachment; filename='.$file);
header("Content-type: ".mime_content_type($file));
header('Content-Transfer-Encoding: binary');
ob_clean();
flush();
readfile($file);
?>
于 2013-07-12T13:04:07.303 回答
0

如果您有一个index.html文件会阻止服务器列出目录内容。现在,您必须担心人们猜测您的文件的文件名。您可以通过神秘的名称存储它们。看看散列函数来生成随机字符串。

当您让用户下载文件时,您应该使用 PHP 脚本来读取文件的内容并发送正确的 MIME 标头。您不应该直接链接到神秘的名称,以使这些名称保密。然后 PHP 脚本可以对用户进行正确的验证。

但首先您应该检查您的主机是否允许您将文件放在不公开的文件夹中。如果您可以将文件存储在非公共文件夹中,那么您的状态就很好。

于 2013-07-12T00:06:23.310 回答