如何在C#中生成加密的html URL?

时间:2015-05-19 08:22:13

标签: c# asp.net encryption

创建Intranet应用程序,其中URL将通过电子邮件(outlook)发送给用户。此URL应使用密码生成(需要基于其电子邮件/ Emp ID的randon URL),并且通过此URL用户应该能够登录帐户。该链接还应具有时间有效性。示例:链接在7天后过期。

我有什么? 用户的电子邮件和员工ID。

任何指针,如何在C#中实现上述任务?或任何其他想法,因为我只需要用户使用电子邮件访问应用程序一段时间。

2 个答案:

答案 0 :(得分:0)

好像你有点混淆了。无法使用ID或emai加密URL。将员工ID或电子邮件用作关键字几乎没有意义,因为它们是公共信息。

您可以做的是为URL创建一个随机字符串,并使用这两个信息来生成字符串。但是,一旦他们访问该网址,您就需要向他们询问密码密码才能登录。只需访问该网址并输入他们的电子邮件,您就无法获得安全保护。如果您有权访问电子邮件/员工ID(您必须承担所有权限),那么通过暴力破解此类系统是微不足道的。

对于基于电子邮件的URL,您可以xor两个字符串并发送输出。然后使用电子邮件xor输出并获取网址。

public static string xorIt(string email, string url)
{
 StringBuilder sb = new StringBuilder();
 for(int i=0; i < input.Length; i++)
     sb.Append((char)(url[i] ^ email[(i % key.Length)]));
 String result = sb.ToString ();

 return result;
}

检查有效性的方法是将URL与时间戳一起存储在数据库中,并在登录时检查它是否仍然有效。

上述方法有一些注意事项(例如,xor总是为相同的两个字符串生成相同的输出,但如果您添加随机字符串并将该字符串存储在上表中,则可以解决此问题。)

答案 1 :(得分:0)

你无法将其锁定到他们的电子邮件中,因为他们只能复制和发送电子邮件。将URL粘贴到浏览器中。

基本上为了获得时间敏感的行为,您需要具备以下条件:

  1. 数据库表(或某种形式的存储),表示该用户已获得令牌,以及该令牌何时到期
  2. 从用户的电子邮件地址生成密码网址的方法。
  3. 生成URL部分很简单,在伪代码中你可以设想它是这样的:

    var user = GetUser("John.Doe@gmail.com");
    var token = EncryptAndHashEmailAddress(user);
    var entry = new TokenTableEntry(token:token, expires:DateTime.Now.AddDays(7), User: user.Id);
    var url = @"https://www.mywebsite.com/login.aspx?token=" + token;
    

    然后当用户点击链接并点击登录请求的任何句柄时:

    var token = GetQueryParameter(0); // Get first query parameter
    var entry = TokenTable.Element(e => e.Token == token);
    TokenTable.Remove(entry);
    if (DateTime.Now > entry.Expires)
    {
       // Their token has expired
       GoTo("TokenExpired.aspx");
       return;
    }
    LoginController.UserLoggedIn(entry.Id);
    

    这是非常粗糙的伪代码,但它应该让你走在正确的轨道上。