【问题标题】:Is it safe to use a UUID in a URL for semi-private data?在半私有数据的 URL 中使用 UUID 是否安全?
【发布时间】:2019-02-20 08:16:21
【问题描述】:

我经营着一家园林绿化公司,拥有多名员工。我想为每个人提供一个自定义 URL(如 mysite.com/xxxx-xxxx-xxxx),以显示他们的每日日程安排。转到该页面将列出当天 5-10 位客户的姓名、地址和电话号码。

在半私有数据的 URL 中使用 UUID 是否安全/明智?

【问题讨论】:

  • 我决定不使用唯一的 URL,而是让他们必须登录才能看到他们的日程安排。我认为这是正确的决定(更安全、更可扩展、更容易让新员工入职、更容易解雇前员工)。

标签: security uuid websecurity


【解决方案1】:

取决于您希望它有多安全。

UUID 是否用于其他用途?如果没有,它们可以用于创建随机 URL。

但是,浏览器历史记录将允许使用同一台机器的任何人查找 URL。此外,除非使用 https,否则网络嗅探器可以轻松查看请求的 URL 并转到同一页面。

另一个问题是蜘蛛机器人。确保没有链接到这些页面,使用 robots.txt 来防止将网站编入索引,但您仍然可能会发现某些页面出现在搜索引擎上。最好将 UUID 设置在 cookie 中并检查以确定它是哪个员工,以免您的半私人页面开始出现在 google 上。

【讨论】:

    【解决方案2】:

    该架构是否适合您,取决于您的威胁模型(以及一些实施细节)。如果没有具体的威胁模型,就不可能对您的问题给出明确的答案。

    不过,我可以就解决方案的潜在问题向您提供一些想法,以便您确定它们是否与您的应用程序相关。这不是一个完整的列表。

    在实现方面:

    • 并非所有 UUID 生成器都是一样的。理想情况下,您希望使用基于加密安全 RNG 的生成器,提供随机选择每个字节的 UUID。
    • 使用 UUID 进行数据库查找或类似操作不一定是恒定时间操作(因此可能存在边信道攻击,除非您自己实现查找)
    • 确保您的 URI 不会通过引荐来源网址泄漏
    • 某些工具会尝试检测“秘密”URL,以保护它们免受历史同步或其他自动功能的影响。您的架构很可能不会被检测为“机密”。人为地延长 URI 并将 UUID 移动到查询参数中可能会更好。
    • 您可以通过常用方法(速率限制、服务器强化等)进一步减少攻击面

    在事物的概念方面:

    • 识别和身份验证的单一标识符不一定是坏事。但是,在大多数情况下,需要一个仅用于标识的标识符——在这些情况下,您不得使用“秘密”UUID
    • 如果“船员”由多人组成:您不能撤销单个船员的访问权限
    • 某些软件(防病毒软件、浏览器等)将 URL 中的信息视为公共信息,并可能在没有用户交互的情况下上传它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2014-01-12
      • 1970-01-01
      • 2011-11-25
      相关资源
      最近更新 更多