我正忙着为我的项目登录系统。
仅为了安全性的额外步骤..如何检查/检测用户是否手动更改了cookie值?
有一些简单的方法吗?或者我是否必须设置一个额外的Session变量并将其与之匹配?有了这个说法,浏览器是否可以追溯正常的ASP.Net会话?并且可以向用户查看?
感谢。
答案 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。