协助接受/拒绝链接的URL结构

时间:2010-06-22 22:01:57

标签: c# url newsletter

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

我遇到的问题是我想要防止有人可以“猜测”其他人网址的情况 - 就像这样的客人参数组合等等。虽然这种情况不太可能,但我仍然希望阻止这样做。

我已经看过几个有助于防止这种情况的场景,即。添加哈希值,加密网址等。但我正在寻找最安全和最佳实践的方法,并希望任何可能的反馈。

顺便说一下,我在C#中进行编码,但我不相信解决方案是针对特定语言的。

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

  1. 首先将您在URL中使用的信息存储为数据库中的某个参数。这应该相对快速和简单。
  2. 创建两个GUID。
  3. 将第一个GUID与数据库中用于处理“接受”的数据相关联。
  4. 将第二个GUID与数据库中的“拒绝”记录相关联。
  5. 使用GUID作为参数创建两个URL。
  6. 如果单击“接受URL”,请使用与其关联的数据库数据来处理接受。
  7. 如果单击“拒绝”,则删除数据库中的数据,或将其存档,或其他任何内容。
  8. 在一段时间后,没有点击任何网址,删除或存档与这些GUID相关联的数据,以便无法再使用它们。
  9. GUID非常难以猜测,并且猜测实际可用的GUID的可能性太小,几乎不可能。

答案 1 :(得分:0)

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

所以你散列例如emailaddress,记录的PK值,加上它的时间戳,以及一些真的不可能猜盐。只需将各个字段连接在一起并散列它们即可。

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

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

当用户单击此类链接时,您的服务器会在数据库中查找包含所提供密钥的记录。易于实施,如果做得对,真的很安全。在地狱里没有人可以猜到另一个人的关键。在使用散列处理时,请记住标准事物。如:

  • 别忘了加盐。
  • 选择一种非常慢且非常安全的哈希算法。
  • 只要确保没有人能从他们拥有的信息中找出自己的哈希值。
  • 如果你真的害怕做坏事的人,请务必通过在网站上添加油门控制来停止强制执行。例如,每分钟只允许X个请求。或某种形式的禁止IP地址。

我不是这方面的专家,所以可能还有改进的余地。但是我认为这应该指向正确的方向。

修改:我必须添加; Tim C提供的解决方案也很好。对于像这样的情况,GUID确实非常有用,并且与上面的哈希解决方案一样有效地工作。