Node表达公共可访问的URL安全性

时间:2015-12-13 06:16:51

标签: node.js express encryption base64

大家好日子。

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

我想要实现的目标。

1.使用url +参数向客户端发送邮件,该参数可以在用户点击网址时唯一标识客户端,并将参数发送到我的快速服务器。

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

我的方法

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

我也会对字符串进行url编码。

2.当用户点击网址并且请求到达我的快递服务器时,我解码字符串以检索客户详细信息(customer_idcustomer_name)然后对客户进行查找。 / p>

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

我的方法是否正确?

谢谢你们!

2 个答案:

答案 0 :(得分:2)

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

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

希望这有帮助!

答案 1 :(得分:1)

While the original approach is not secure, using MongoDB's ID's is not secure either. See this related question.

Unfortunately, MongoDB ID's are guessable, as they were not designed to be used as a source of entropy.

But it really depends on the value of what you are protecting with these URL's, and how much you are willing to compromise security for the sake of convenience. MongoDB ID's are certainly better than the original approach, and may be secure enough for you to be willing to accept the risk.

But if I saw that in your application while performing a security audit, I would mark it as a weakness and recommend that you use a Cryptographically Secure Psuedo-Random Number Generator ( CSPRNG ) such as /dev/urandom.