使用PHP / MySQL安全地存储和提供用户文件

时间:2013-11-30 05:35:06

标签: php mysql file security

这是最佳实践和实施问题。

以下是方案/要求:

- 后端是PHP,DB是MySQL - 用户登录建立会话,整个站点使用HTTPS - 用户可以将医疗文件(png / mp4 / pdf ...)上传到他们的帐户。 - 用户需要能够查看(站点内联IMG或VIDEO)或下载他的文件。 - 除非获得授权(在DB上设置标志),否则非所有者用户无法查看文件。 - 除非用户是所有者并且具有活动会话,否则文件URL共享无法工作。

我通过AJAX上传文件。现在我生成一个随机密钥并将其用作服务器上的文件名,以避免文件名猜测。但下一个问题是,如果某人有URL,他们可以查看文件。

我需要采取哪些措施和实际步骤来解决这个问题?由于它是医疗,安全是至关重要的。有什么我忽略或遗失的吗?

由于

2 个答案:

答案 0 :(得分:0)

在媒体文件目录中,添加具有以下内容的htaccess文件:

order deny,allow
allow from [IP_ADDRESS]
deny from all

IP_ADDRESS是你的php服务器的ip地址。这将限制人们导航到文件所在的目录。

然后使用PHP来提供文件(修改标题)。例如:

header('Content-type: '.$mimeType);
header("Content-Disposition: inline; filename=".$filename);//lets the browser open the pdf
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: pre-check=0, post-check=0, max-age=0');
header('Pragma: anytextexeptno-cache', true);
header('Cache-control: private');
header('Expires: 0');
readfile($file);

这样您还可以修改输出中的文件名。如果您想保护/限制文件只能由拥有权限的人访问,您现在可以使用PHP执行此操作。

希望这有帮助。

答案 1 :(得分:0)

我建议如下:

  1. 在MYSQL中为每个用户使用单独的数据库。
  2. 在新注册时使用php创建一个单独的数据库。 (create database <db_name>;
  3. 维护一个包含用户登录信息的公用表(即User_id,email,password,db_name alloted),使用此表验证登录凭据并激活会话&amp;该用户的数据库。
  4. 使用MYSQL password()方法在上述表格中注册时存储到db之前加密密码以提高安全性。
  5. 在每个&amp;开头验证/验证session每个php页面都可以避免访问流浪URL。
  6. session/coookie中设置PHP.INI有效期。
  7. 保持随机文件名至少32个字符或更好64个字符以避免猜测。
  8. 不要将上传的文件存储在服务器目录(即htdocs或www)中,而是保存在每个用户的个人目录下的文件系统中。使用php访问文件结束echo内容到浏览器。注意:使用随机名称分配给每个用户的目录。
  9. 避免将文件存储到MYSQL数据库以保存和保存。绩效问题......
  10. 如果有任何不清楚的地方,请告诉我..... 感谢。