为临时访问私有资源生成 URL 安全吗?

问题描述 投票:0回答:1

我正在为一家商店制作一个小网站,它几乎是一个着陆页。没有客户账户系统。该网站有一个查看订单详情的页面,该页面仅供下订单的人查看。所以我需要一种方法来验证对该页面的请求。

我决定应用这个系统来授权访问订单信息:

  • 当客户发布订单时,他们会指定他们的电子邮件。所以我可以使用电子邮件来验证访问订单详细信息的请求。
  • 当客户想要访问订单详细信息时,他们会在登录页面上以特殊形式输入他们的订单 ID。然后,他们将在电子邮件中的路径中收到一个带有新生成的密钥的 URL。该 URL 指向所请求订单的详细信息页面。为了安全起见,以下规则应用于此 URL:
    1. 网址有效期只有6小时左右。
    2. 第一个使用 URL 的客户端获取与其基于 cookie 的会话关联的 URL。稍后只允许具有该会话 cookie 的客户端查看该页面。
    3. 所有此类 URL,即使是过期的 URL,都有一个唯一的密钥。

这个想法安全吗?将密钥放在 URL 路径中安全吗?我将使用密码安全的随机数生成器来生成密钥,我该怎么做才能快速生成唯一密钥,而无需重复生成密钥并对照数据库检查每个密钥,直到找到未占用的密钥?

authentication url https privacy
1个回答
0
投票

您可以生成一个 UUID,这是确保它唯一的好方法(它有 128 位长,因此生成重复项的可能性极小)。我不确定您使用的是哪种服务器端语言,但您应该能够使用现有的库来生成这些 UUID。 出于您的目的,我认为将唯一标识符放在 URL 的查询字符串(而不是路径参数)中是可以的。 我还建议尽量减少您可以在订单页面上查看的敏感信息的数量,例如付款明细。

© www.soinside.com 2019 - 2024. All rights reserved.