0

我正在创建一个应用程序,客户可以在其中将电子邮件地址添加到事件中。这意味着每个电子邮件地址在添加到列表时会通过电子邮件发送 2 个 url,1 个 url 接受,另一个拒绝。url 由许多查询参数、id 等组成。

我遇到的问题是我想防止有人可以“猜测”另一个人的 url 的情况——例如来宾参数的组合等。虽然这不太可能,但我仍然想阻止这种情况。

我已经看到了几种情况来帮助防止这种情况,即。添加哈希值,加密 url 等。但是我正在寻找最安全和最佳实践的方法,并希望得到任何可能的反馈。

顺便说一句,我正在用 C# 进行编码,但我不相信解决方案是特定于语言的。

提前致谢。

4

2 回答 2

0

我同意这不是特定于语言的。在过去的几年里,我的情况与此非常相似。由于孩子和父母接收通信,它需要非常安全。最快的解决方案如下所示:

  1. 首先将您将在 URL 中使用的信息作为参数存储在数据库中的某处。这应该相对快速和简单。
  2. 创建两个 GUID。
  3. 将第一个 GUID 与数据库中用于处理“接受”的数据相关联。
  4. 关联数据库中“拒绝”记录的第二个 GUID。
  5. 仅使用 GUID 作为参数创建两个 URL。
  6. 如果单击接受 URL,则使用与其关联的数据库数据来处理接受。
  7. 如果单击拒绝,则从数据库中删除数据,或将其存档,或其他任何方式。
  8. 一段时间后,没有任何 URL 被点击、删除或存档与这些 GUID 相关联的数据,这样它们就不能再被使用了。

GUID 是非常难以猜测的,而且猜测一个实际可用的可能性非常小,几乎是不可能的。

于 2010-06-22T22:15:28.640 回答
0

我猜你把这些电子邮件地址保存在某个地方。因此,为您拥有的每个条目制作一个安全标识符非常容易。无论是散列还是某种加密技术,都无关紧要。但我想哈希更容易实现,实际上是为了这项工作。

因此,您可以散列例如电子邮件地址、记录的 PK 值、添加时间的时间戳,以及一些真的不可能猜到的盐。只需将各个字段连接在一起并散列它们。

最后,您只向服务器发送散列密钥。因此,当您发送这两个链接时,它们可能如下所示:

http://www.url.com/newsletter/acceptsubscription.aspx?id=x1r15ff2svosdf4r2s0f1
http://www.url.com/newsletter/cancelsubscription.aspx?id=x1r15ff2svosdf4r2s0f1

当用户单击此类链接时,您的服务器会在数据库中查找包含所提供密钥的记录。易于实施,如果操作正确,则非常安全。在地狱里没有办法有人可以猜到另一个人的钥匙。在使用散列做某事时,请记住标准的事情。如:

  • 不要忘记加盐。
  • 选择一个非常慢且非常安全的散列算法。
  • 只要确保没有人可以从他们可以拥有的信息中找出他们自己的哈希值。
  • If you are really scared of people doing bad things, make sure to stop bruteforcing by adding throttle control to the website. Only allow X number of requests per minute for example. Or some form of banning on an IP-address.

I'm not an expert at these things, so there might be room for improvement. However I think this should point you in the right direction.

edit: I have to add; the solution provided by Tim C is also good. GUID's are indeed very useful for situations like these, and work effectively the same as my hashed solution above.

于 2010-06-22T22:16:31.637 回答