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

本文关键字:cookie 用户 是否 检查 | 更新日期: 2023-09-27 18:03:47

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

只是为了额外的一步安全…如何检查/检测用户是否手动更改了cookie值?

有简单的方法吗?或者我是否必须设置一个额外的Session变量并将其与之匹配?话虽如此,这是一个正常的ASP。Net会话可被浏览器跟踪?用户可以看到吗?

谢谢。

检查用户是否手动更改了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;
}

Edit:固定编码器,使其明确为UTF-8。

与往常一样,您还应该确保在调用此方法之前向字符串添加一些盐,参见:PHP密码的安全哈希和盐

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

为什么不加密cookie值呢?这样用户就很难正确地更改它。就像前面的答案提到的,如果它真的很敏感,cookie不是存储它的地方,但是加密可以给你更多的保护。

在cookie中添加第二个变量,该变量与第一个值唯一。

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

如果不匹配,则删除cookie