【问题标题】:Node express public accessible url securityNode express 可公开访问的 url 安全性
【发布时间】:2015-12-13 06:16:50
【问题描述】:

大家好。

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

我想要达到的目标。

1.发送邮件给客户端,带有url+参数,当客户端点击url时可以唯一标识客户端,参数发送到我的快递服务器。

2.我的快递应用程序接收参数并对其进行解码以从编码字符串中检索参数,以便我可以查找客户。

我的方法

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

我还对字符串进行 url 编码。

2.当用户点击 url 并且请求到达我的快递服务器时,我解码字符串以检索客户详细信息(customer_id 和 customer_name)然后查找客户。

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

我的方法正确吗?

谢谢你们!

【问题讨论】:

    标签: node.js express encryption base64


    【解决方案1】:

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

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

    希望这会有所帮助!

    【讨论】:

    • 好吧,我明白了。我使用一个 mongo db,每个字段都有一个对象 _id,由一个 4 字节值组成,表示自 Unix 纪元以来的秒数,一台 3 字节机器标识符、一个 2 字节的进程 ID 和一个 3 字节的计数器,以随机值开头。应该可以吗?
    • 是的,我也使用 mongodb。我使用的是 Mongo 的对象 ID。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 2017-08-14
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 2022-10-12
      • 2015-12-24
      • 2020-03-26
      • 2013-06-20
      相关资源
      最近更新 更多