C# 接受/拒绝链接的URL结构帮助

C# 接受/拒绝链接的URL结构帮助,c#,url,newsletter,C#,Url,Newsletter,我正在创建一个应用程序,客户可以在其中向活动添加电子邮件地址。这意味着每个电子邮件地址在添加到列表时通过电子邮件发送两个url,一个url接受,另一个url拒绝。url由许多查询参数、id等组成 我所面临的问题是,我希望防止出现这样的情况,即有人可能猜测另一个人的url,例如guest、参数组合等。虽然这不太可能,但我仍然希望防止出现这种情况 我已经看到了几种有助于防止这种情况的方案,即添加哈希值、加密url等。但是,我正在寻找最安全和最佳实践的方法,并希望得到任何可能的反馈 顺便说一句,我是用

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

我所面临的问题是,我希望防止出现这样的情况,即有人可能猜测另一个人的url,例如guest、参数组合等。虽然这不太可能,但我仍然希望防止出现这种情况

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

顺便说一句,我是用C语言编写代码的,但我不相信解决这个问题的方法是特定于语言的


提前谢谢。

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

首先将URL中使用的信息作为参数存储在数据库中的某个位置。这应该是相对快速和简单的。 创建两个guid。 将第一个GUID与数据库中用于处理验收的数据相关联。 关联数据库中拒绝记录的第二个GUID。 仅使用GUID作为参数创建两个URL。 如果单击了验收URL,请使用与其关联的数据库数据来处理验收。 如果单击了拒绝,则从数据库中删除数据,或将其存档,或其他任何操作。 在一个时间段后,单击的不是URL,请删除或归档与这些GUID关联的数据,以便不再使用它们。
GUID极难猜测,猜测一个实际可用的GUID的可能性非常小,几乎是不可能的。

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

例如,你将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对于此类情况确实非常有用,并且与上面的哈希解决方案一样有效。

Cheers Cloud,一种有趣的实现我所需的方法,决定使用GUID方法。