代码之家  ›  专栏  ›  技术社区  ›  Vishal

如何生成哈希或使用加密来保护asp.netmvc应用程序?

  •  1
  • Vishal  · 技术社区  · 16 年前

    编辑一:我想我自己也不清楚 所以说不出话来 更好。所以,我正在创建一个系统 我提供页面内容给 将登录到另一个系统 在我系统的cookie中输入用户密钥 系统。我想加密这些值 允许进入其他人 通过修改一个值。有 对于这种类型的 加密/安全?你觉得呢 在这种情况下建议我怎么做?

    大家好,

    我有两个对用户来说是唯一的密钥,它们由客户端通过iframe传递,为了维护会话,我们使用这些值创建cookies他们。所以呢,现在我要加密或生成这些值的哈希,因为它们在url中可见我不希望用户操纵这些值。

    所以,我想我想为这两个键生成一个散列,并在浏览器中显示它,以阻止用户输入一些随机值并试图滥用系统。我想我们应该将这些散列值存储在数据库中,然后与原始值进行比较。

    4 回复  |  直到 16 年前
        1
  •  2
  •   Darin Dimitrov    16 年前

    我建议您使用机器密钥加密/解密:

    var ticket = new FormsAuthenticationTicket(
        1, // version
        "ticketName", // name of the ticket (it doesn't really matter here)
        DateTime.Now, // issue date
        DateTime.Now.AddMinutes(1), // validity of the ticket
        false, // should the ticket be persistent
        "key1=value1&key2=value2......" // values to encrypt, could be any string
    );
    string encrypted = FormsAuthentication.Encrypt(ticket);
    

    现在通过有线发送加密字符串,另一方面解密。使用SSL在加密通道上执行此操作非常重要,以避免中间的人窃取加密值并试图强行执行:

    var ticket = FormsAuthentication.Decrypt(encrypted);
    if (!ticket.Expired)
    {
        // The ticket hasn't expired (< 1min) => use the values
        string keys = ticket.UserData;
        // TODO: Parse and issue cookie
    }
    

    要使这一点起作用,就必须有同样的方法 machine keys 在加密和解密方面。


    更新:

    步骤如下:

    1. 系统A决定在iframe系统B(域2)中包括用户未被认证的部分
    2. 系统A使用机器密钥生成包含用户信息的加密字符串
    3. 系统A(通过iframe的src属性)向系统B发送这个加密值
    4. 系统B发出一个身份验证cookie,以指示用户现在已在域2上通过身份验证
    5. 系统B向用户显示经过身份验证的内容

    您已实现跨域单点登录。当然,这种技术并不局限于iframe。

        2
  •  2
  •   Levi    16 年前

    {ID=1,User=Bob}
    {ID=2,User=Bob}

    {ID=4,User=Bob}
    {ID=5,User=Susan}

    如果我误解了你的想法,请澄清。:)

        3
  •  2
  •   erickson    16 年前

    这可以由消息身份验证代码(如HMAC算法)提供。在这里,共享秘密与数据相结合,并进行迭代散列。结果与数据一起发送。知道共享秘密的接收者可以对数据执行相同的处理,并查看其结果是否与提供的MAC匹配。如果没有,数据是伪造或篡改的。

    不要试图自己实现HMAC算法。这个 .NET class library 提供了算法的一些变体。

        4
  •  1
  •   Kelsey    16 年前

    以纯文本形式呈现数据,安全性是否正确无所谓。通过使用哈希、加密或任何其他方法来“隐藏”这些数据,只会再次保护最基本的用户。

    分析为什么要保护查询字符串以及哪些部分很重要。然后验证服务器端(控制器)上的数据,以确保每个操作确实正确。。。不管你认为你的查询字符串加密/obsfaction有多安全,其他任何事情都会让你被操纵。