我在活动结束后向网站发送电子邮件的成员,以便他们对教师进行评分和小费。有没有办法创建一些独特的密钥,并将其包含在电子邮件链接回我的网站,以便他们可以评价和提示,而无需重新登录?如果是这样,最好的方法是什么?是否存在Asp.Net标识?
看起来Uber可能正在使用下面的提示链接,但我不确定。
https://gratitude.uber.com/tips/trip/33879346-bba8-406a-82a8-2afcda9aa3e7
答案 0 :(得分:0)
将用户添加到数据库,然后将带有UserId的链接作为查询字符串发送:
www.mysite.co.uk/survey?id=4546
使用参数创建一个名为surveycontroller的控制器,以捕获id并指向调查html页面。
答案 1 :(得分:0)
.net Framwork提供了RNGCryptoServiceProvider类 使用。实现加密随机数生成器(RNG) 由加密服务提供商(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攻击创建阻止列表
禁用生成的密钥,并在通过上述所有安全措施
使用验证码验证来避免BruteForce或非人访问您的网页