节点表达 public 可访问 url 安全

Node express public accessible url security

大家好。

我只想运行让你通过这个场景,以确保我的方法没有任何漏洞。

我想达到的目标

1.Send 给客户的邮件带有 url + 参数,当他点击 url 并且参数被发送到我的快递服务器时,可以唯一地识别客户。

2.My express 应用程序接收参数并将其解码以从编码字符串中检索参数,以便我可以查找客户。

我的做法

1.When 发送邮件 我生成一个 base64 编码的字符串,它使用 customer_id + '~' + customer_name 作为我发送邮件的 url 参数。

我也url编码字符串。

2.When 用户单击 url 请求到达我的快递服务器 我解码字符串以检索客户详细信息(customer_idcustomer_name)然后查找客户。

我显示的信息是半敏感信息,因此我不希望任何人篡改 url 以查看其他客户信息。

我的方法正确吗?

谢谢大家!

这不是那么安全。由于您提到您正在连接客户 ID + 名称并仅转换为 base64,因此知识渊博的用户可以简单地对其进行解码,然后尝试变体 "potentially" 访问其他用户记录。

根据一般经验,如果客户信息敏感,则不要将其作为 link 参数传递。相反,创建一个 UUID 并存储在客户记录中。我个人甚至在这个 UUID 上设置了 TTL。它更难猜测,也更安全。然后将其作为 link 的参数传递,可用于查找和进一步处理。

希望对您有所帮助!

虽然原来的方法不安全,但使用 MongoDB 的 ID 也不安全。参见 this related question.

不幸的是,MongoDB ID 是可以猜测的,因为它们并非设计为用作熵源。

但这实际上取决于您使用这些 URL 保护的内容的价值,以及您愿意为了方便而牺牲多少安全性。 MongoDB ID 肯定比原来的方法更好,并且可能足够安全,您愿意接受风险。

但如果我在执行安全审核时在您的应用程序中看到这一点,我会将其标记为弱点并建议您使用加密安全伪随机数生成器 ( CSPRNG ),例如 /dev/urandom。