检查用户是否已手动更改cookie值

时间:2011-07-27 13:38:53

标签: c# asp.net cookies session-cookies

我正忙着为我的项目登录系统。

仅为了安全性的额外步骤..如何检查/检测用户是否手动更改了cookie值?

有一些简单的方法吗?或者我是否必须设置一个额外的Session变量并将其与之匹配?有了这个说法,浏览器是否可以追溯正常的ASP.Net会话?并且可以向用户查看?

感谢。

4 个答案:

答案 0 :(得分:10)

您可以在cookie值附加数字签名,并在阅读时检查签名。这样,如果cookie值被篡改,那将非常明显。

private string sign(string hashStr, byte[] secret) 
{
    // Compute the signature hash
    HMACSHA1 mac = new HMACSHA1(secret);
    byte[] hashBytes = Encoding.UTF8.GetBytes(hashStr);
    mac.TransformFinalBlock(hashBytes, 0, hashBytes.Length);
    byte[] hashData = mac.Hash;

    // Encode the hash in Base64.
    string hashOut = Convert.ToBase64String(hashData);

    return hashOut;
}

修改:修正了编码器,使其显式为UTF-8。

像往常一样,在调用之前,您还应确保在字符串中添加一些盐,请参阅:Secure hash and salt for PHP passwords

答案 1 :(得分:2)

如果您必须处理此类敏感信息,我建议您不要将其存储在用户Cookie中。而是使用sessions来存储此类值,因为用户将无法篡改此类值。

答案 2 :(得分:1)

为什么不加密cookie值。这样,用户很难正确地进行更改。就像之前的回答一样,如果它真的很敏感,那么cookie不是存储它的地方,但加密可以为你提供更多的保护。

答案 3 :(得分:0)

向您的Cookie添加第二个变量,该变量对于第一个值是唯一的。

Page_Load上将两个值与数据库进行比较。

如果它们与记录不匹配,则删除cookie。