Express 节点快速路由处理程序——告诉用户是单击链接发出请求还是手动键入URL栏?

Express 节点快速路由处理程序——告诉用户是单击链接发出请求还是手动键入URL栏?,express,Express,我有一个路由请求处理程序,它接受一个请求参数,该参数应该与数据结构中的一个键匹配……当找到该键对应的对象时,请求者获得对该对象的访问权 问题是,只有当即将获得访问权限的用户单击通过邀请通过电子邮件发送给他们的生成链接时,才应该真正触发请求处理程序——没有任何东西可以阻止随机用户幸运地猜测唯一密钥可能是什么,并在他们实际上不知道的情况下获得对对象的访问权限邀请 这是我的密码: app.get('/:creator', function (req, res) { var path = req.p

我有一个路由请求处理程序,它接受一个请求参数,该参数应该与数据结构中的一个键匹配……当找到该键对应的对象时,请求者获得对该对象的访问权

问题是,只有当即将获得访问权限的用户单击通过邀请通过电子邮件发送给他们的生成链接时,才应该真正触发请求处理程序——没有任何东西可以阻止随机用户幸运地猜测唯一密钥可能是什么,并在他们实际上不知道的情况下获得对对象的访问权限邀请

这是我的密码:

app.get('/:creator', function (req, res) {
  var path = req.params.creator.toLowerCase();
  for(booth in boothList) {
    var boothID = boothList[booth].creator.toLowerCase();
    if (path == boothID) {
      res.sendFile(__dirname+'/public/index.html');
    }
  }
});
同样,情况是这样的:

假设第一个用户创建了一个具有唯一名称“Me”的展位……他们通过链接
http://www.myappsite.com/Me
,被邀请的人可以点击链接并加入展位,因为他们应该能够……问题是,未被邀请的用户只需手动输入他们的URL栏
http://www.myappsite.com/Me
并加入展位,就好像他们被邀请一样,即使他们没有被邀请


如何确保不会发生这种情况?

您将始终依赖于链接本身的大小。更大的和随机创建的名字很难猜测和发现只是使用蛮力作为攻击向量。如果你让你的用户选择自己的名字,他们可能会选择简短易懂的名字,同样的名字也很容易通过简单的字典攻击猜出来。除非您开始使用其他数据来验证传入的请求(如ip地址等),否则您无法对此进行大量处理

您可以增加生成链接的大小,使其更难猜测。例如,用户为其密钥选择名称
foo
,但您可以生成类似
https://example.com/SRJsWVTxIxYAcPErxwqG7h/foo
。假设随机字符串是由加密安全的RNG生成的,那么您几乎可以肯定有人使用暴力并获得有效密钥的几率相对较低

当然,系统中有效密钥数量的增加也会增加攻击者仅通过发送随机字符串猜测密钥的可能性。您可以使用

有很多其他方法可以保护您的系统不被猜测,但是如果您只想共享电子邮件,而不想让用户同意某种密码来保护链接,那么链接扩展是最简单的解决方案

但是如果能阅读其他人对这件事的看法,那就太好了。

谢谢你的建议——我怀疑我必须在URL上预先添加一个salt+哈希或类似的东西,但我希望找到一个更直接的解决方案。在我接受你的答案之前,我会先把这个问题搁置几个小时,以防万一,我会找到我想要的东西。