C# 手动检查用户是否更改了cookie值

C# 手动检查用户是否更改了cookie值,c#,asp.net,cookies,session-cookies,C#,Asp.net,Cookies,Session Cookies,我正忙于我的项目的登录系统 只是为了更安全一步。。如何检查/检测用户是否手动更改了cookie值 有什么简单的方法吗?或者我必须设置一个额外的会话变量并与之匹配吗?这么说来,正常的ASP.Net会话是否可以通过浏览器进行跟踪?并且用户可以看到 谢谢。如果您必须处理此类敏感信息,我建议您不要将其存储在用户cookie中。而是使用会话来存储这些值,因为用户将无法篡改这些值。为什么不加密cookie值呢。这样,用户很难真正正确地更改它。正如前面的回答所提到的,如果cookie非常敏感,那么cookie

我正忙于我的项目的登录系统

只是为了更安全一步。。如何检查/检测用户是否手动更改了cookie值

有什么简单的方法吗?或者我必须设置一个额外的会话变量并与之匹配吗?这么说来,正常的ASP.Net会话是否可以通过浏览器进行跟踪?并且用户可以看到


谢谢。

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

为什么不加密cookie值呢。这样,用户很难真正正确地更改它。正如前面的回答所提到的,如果cookie非常敏感,那么cookie就不是存储它的地方,但加密可以为您提供多一点保护。

您可以在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


通常,在调用此函数之前,还应该确保向字符串中添加一些salt,请参见:

向cookie中添加第二个变量,该变量对于第一个值是唯一的

页面上加载
将两个值与数据库进行比较


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

加密是不够的-您可以更改值,但它不会被检测到(尽管解密可能失败,当然用户正在进行盲目更改)-您还必须签署cookie,正如比尔·布拉斯基建议的那样。真的,兄弟,我认为这个答案不值得否决。看看这个答案,这是一个选项。这取决于你的意图。可能是加密对他有用。谢谢你,比尔,我一定会用这个。如果有人从你的电脑上复制了cookie,以后再使用会怎么样?如何防止此问题此代码用于签名,我们检查篡改的另一部分在哪里?