首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHP/MySQL安全地存储和服务用户文件

使用PHP/MySQL安全地存储和服务用户文件
EN

Stack Overflow用户
提问于 2013-11-30 05:35:05
回答 2查看 1K关注 0票数 1

这既是一个最佳实践问题,也是一个实施问题。

以下是方案/要求:

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

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

要做到这一点,我需要采取哪些措施和实际步骤?因为它是医疗的,所以安全是最重要的。有什么我忽略或遗漏的东西吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-30 06:35:52

我建议如下:

  1. 对MYSQL中的每个用户使用单独的数据库。
  2. 在新注册时使用php创建一个单独的db。(create database <db_name>;)
  3. 维护一个包含用户登录信息(即User_id、电子邮件、密码、db_name分配的)的通用表,使用此表验证登录凭据并激活该用户的会话& db。
  4. 使用MYSQL password()方法在上述表中注册时先加密密码,然后存储到db,以获得额外的安全性。
  5. 在每个&每个php页面的开头验证/验证session,以避免访问偏离的URL。
  6. session/coookie中设置PHP.INI过期期。
  7. 保持随机文件名至少32个字符宽或更长64个字符,以避免猜测。
  8. 不要将上传的文件存储在服务器目录(即htdocs或www)中,而是将文件系统中的每个用户保存在单独的目录下&使用php来访问文件端,将内容保存到浏览器。注意:为分配给每个用户的目录使用随机名称。
  9. 避免将文件存储到MYSQL db以避免保存和性能问题.

如果有什么不清楚的地方请告诉我.谢谢。

票数 0
EN

Stack Overflow用户

发布于 2013-11-30 06:29:00

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

代码语言:javascript
运行
复制
order deny,allow
allow from [IP_ADDRESS]
deny from all

其中IP_ADDRESS是php服务器的ip地址。这将限制用户导航到文件所在的目录。

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

代码语言:javascript
运行
复制
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来实现这一点。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20296959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档