我在活动结束后向我的网站成员发送电子邮件,这样他们就可以给老师打分和小费。有没有办法创建一些唯一的密钥,并将其包含在返回我的网站的电子邮件链接中,这样他们就可以在不必重新登录的情况下进行评分和小费?如果是这样,最好的方法是什么?Asp.Net身份中有什么东西吗?
看起来优步可能会用下面的提示链接来做这件事,但我不确定。
https://gratitude.uber.com/tips/trip/33879346-bba8-406a-82a8-2afcda9aa3e7
将用户添加到数据库中,然后将带有其UserId的链接作为查询字符串发送:
www.mysite.co.uk/survey?id=4546
创建一个名为surveycontroller的控制器,该控制器带有一个参数来捕获id并直接指向调查html页面。
查看本文
.net框架提供了RNGCryptoServiceProvider类使用加密服务提供商(CSP)提供的实现。这个类通常用于生成随机数。虽然我可以在某种意义上,使用这个类可以生成唯一的数字,但它也是而不是无碰撞。此外,在生成密钥的同时,我们可以使密钥更多由于将其设为字母数字而非仅为数字,因此变得复杂。因此,我使用这个类和一些字符掩码来生成固定长度的唯一密钥。以下是代码示例:
private string GetUniqueKey() { int maxSize = 8 ; int minSize = 5 ; char[] chars = new char[62]; string a; a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; chars = a.ToCharArray(); int size = maxSize ; byte[] data = new byte[1]; RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider(); crypto.GetNonZeroBytes(data) ; size = maxSize ; data = new byte[size]; crypto.GetNonZeroBytes(data); StringBuilder result = new StringBuilder(size) ; foreach(byte b in data ) { result.Append(chars[__b % (chars.Length - )>); } <span class="code-keyword">return result.ToString(); }
正如你在评论中提到的,可能存在安全问题,你可以使用blow方法来避免它们:
检查用户最后登录的ip地址,以知道这实际上是用户打开链接
检查用户cookie
创建亚种bruteForce攻击的阻止列表
禁用生成的密钥,并在所有上述安全性通过后启用
使用captcha验证以避免BruteForce或非人类访问您的页面