【问题标题】:Directory Structure Logic目录结构逻辑
【发布时间】:2012-01-26 11:40:09
【问题描述】:

我正在尝试创建这样的文件夹结构:

  • 上传的文件
    • 一个
      • aaron.doe@hotmail.com
    • b
    • c
    • ...一直到z

高于公共网络目录的一级。唯一的唯一键(除了 user_id 本身)是用户电子邮件,因为他们的电子邮件是他们的用户名,所以...

问题:人们是否能够访问这些目录并获得所有用户的电子邮件地址?这是多么糟糕的想法?您有哪些可能的替代方案?

谢谢。

【问题讨论】:

  • 为什么不将这些电子邮件存储在数据库中?
  • 我认为他想使用电子邮件地址作为文件夹名称。
  • 您可以这样做——您可能只想设置一些 Apache 访问规则来限制对该特定目录的访问。 RageZ - 我不认为上传的文件应该进入数据库。也许如果你实现了一个可以工作的查找表。
  • 电子邮件地址存储在数据库中。我将拥有一个涉及上传和下载客户端文件的系统,我需要一种方法来以某种方式跟踪他们的文件,而无需搜索所有可用文件。
  • @jprofitt 是的,RageZ 解释了一个可能的替代方案:-)

标签: php file directory user-management file-organization


【解决方案1】:

一定要确保使用散列而不是纯文本电子邮件地址。这是必须的。

除此之外,我想这是一种安全(和不安全)的解决方案,它基于通过默默无闻的安全性(即您的安全性仅依赖于没有人知道 URL 的事实 - 但如果他们知道,他们可以不受限制地访问它们。)有许多潜在的漏洞 - 用户可以为 URL 添加书签;它可以嵌入页面的某个位置;它可以存储在服务器、浏览器和代理日志中......

【讨论】:

  • 假设我按照 Kevin 上面的建议实现了 Apache 访问规则。即使人们发现了这些文件夹的 url(可能是电子邮件地址),他们是否能够访问它们,因为它们将位于 web 目录上方的文件夹中?有人遍历这些文件夹并提取所有电子邮件地址有多容易?他们可以这样做吗?
  • @user 如果该目录 web 根目录之外,则外部用户将无权访问该目录。但是,这包括您网站的用户。这就是你想要的吗?
  • 如果我提供了用户文件的链接,以便可以下载它们,在用户登录时,用户将无法访问它们?
  • @user 如果您将它们放在网络根目录之外:不,它们将无法访问。如果您希望用户可以访问它们,则必须将它们放在 web 根目录中(上面描述的问题适用),或者创建一个 PHP 脚本来为用户获取文件。如果您将此类脚本与登录检查结合使用,您就有了一个安全的解决方案——这是最常见的方法。
【解决方案2】:

看看PHP的dir函数: http://php.net/manual/en/class.dir.php

如果您希望您的用户可以通过网络公开访问这些文件夹,为什么要将这些文件夹放在网络根目录之上?

此外,您可以考虑对文件夹名称使用某种哈希值,1) 因为没有人希望他们的电子邮件地址公开,以及 2) 泄露内部 user_ids 可能会导致漏洞。

【讨论】:

    【解决方案3】:

    正如佩卡刚刚回答的那样;散列电子邮件地址可能是一个好主意,因为链接很可能会发布到论坛或类似网站,然后帖子可能会被电子邮件地址爬虫抓取。我认为只需一个简单的地址哈希(例如 md5)就可以(几乎)解决这个问题。

    请参阅this thread,了解如何防止目录列出,以及如果 Apache 方式不起作用该怎么办。

    【讨论】:

    • 我现在肯定要实现某种散列。谢谢。
    【解决方案4】:

    散列电子邮件以用作文件夹名称并将其放在网络根目录之上。

    您可以使用简单的身份验证来授予对这些文件的访问权限,并使用 php 文件来读取它们并发送 到浏览器。

    【讨论】:

    • 您能解释一下简单的身份验证部分吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2014-03-02
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多