C# 关于HttpCookies的问题
我需要生成一个具有秘密值的cookie,我是唯一知道它的人C# 关于HttpCookies的问题,c#,asp.net,security,cookies,C#,Asp.net,Security,Cookies,我需要生成一个具有秘密值的cookie,我是唯一知道它的人 想法? 更新 我有一个处理程序页面,每个人都可以使用这个页面,使用Ajax获取RSSFeed。我需要做的是防止其他人伪造HttpRequest并获取返回的数据。我尝试过使用身份验证表单,但没有什么好处。我也听说过nonce token,但我不知道如何使用它! 更新2 这正是我的问题 通常在cookie中存储敏感信息是一个坏主意,但是您可以使用只有在客户端未使用cookie时服务器才知道的密钥对其进行加密。您可以使用AesManage
想法?
更新
我有一个处理程序页面,每个人都可以使用这个页面,使用Ajax获取RSSFeed。我需要做的是防止其他人伪造HttpRequest并获取返回的数据。我尝试过使用身份验证表单,但没有什么好处。我也听说过nonce token,但我不知道如何使用它!
更新2
这正是我的问题 通常在cookie中存储敏感信息是一个坏主意,但是您可以使用只有在客户端未使用cookie时服务器才知道的密钥对其进行加密。您可以使用
AesManaged
类对其进行加密,并将密钥存储在安全的地方,例如具有锁定ACL的文件
下面是一个如何做到这一点的示例
public string GetEncryptedCookieValue(string cookieKey)
{
using (var aes = new AesManaged())
{
aes.Key = new byte[0];//TODO: Replace this with getting the secret key.
aes.IV = new byte[0];//TODO: Replace this with getting the secret IV.
var cookie = Request.Cookies[cookieKey];
var data = Convert.FromBase64String(cookie.Value);
using (var transform = aes.CreateDecryptor())
{
var clearData = transform.TransformFinalBlock(data, 0, data.Length);
return Encoding.UTF8.GetString(clearData);
}
}
}
public void SetEncryptedCookieValue(string cookieKey, string value)
{
using (var aes = new AesManaged())
{
aes.Key = new byte[0];//TODO: Replace this with getting the secret key.
aes.IV = new byte[0];//TODO: Replace this with getting the secret IV.
var clearData = Encoding.UTF8.GetBytes(value);
using (var transform = aes.CreateEncryptor())
{
var data = transform.TransformFinalBlock(clearData, 0, clearData.Length);
Response.SetCookie(new HttpCookie(cookieKey, Convert.ToBase64String(data)));
}
}
}
我要再次强调,在cookie中存储敏感信息是一种不鼓励的做法。如果您将问题更新为您想要完成的内容,也许有一个更合理的解决方案。通常在cookie中存储敏感信息是一个坏主意,但您可以使用只有在客户端未使用cookie时服务器才知道的密钥对其进行加密。您可以使用
AesManaged
类对其进行加密,并将密钥存储在安全的地方,例如具有锁定ACL的文件
下面是一个如何做到这一点的示例
public string GetEncryptedCookieValue(string cookieKey)
{
using (var aes = new AesManaged())
{
aes.Key = new byte[0];//TODO: Replace this with getting the secret key.
aes.IV = new byte[0];//TODO: Replace this with getting the secret IV.
var cookie = Request.Cookies[cookieKey];
var data = Convert.FromBase64String(cookie.Value);
using (var transform = aes.CreateDecryptor())
{
var clearData = transform.TransformFinalBlock(data, 0, data.Length);
return Encoding.UTF8.GetString(clearData);
}
}
}
public void SetEncryptedCookieValue(string cookieKey, string value)
{
using (var aes = new AesManaged())
{
aes.Key = new byte[0];//TODO: Replace this with getting the secret key.
aes.IV = new byte[0];//TODO: Replace this with getting the secret IV.
var clearData = Encoding.UTF8.GetBytes(value);
using (var transform = aes.CreateEncryptor())
{
var data = transform.TransformFinalBlock(clearData, 0, clearData.Length);
Response.SetCookie(new HttpCookie(cookieKey, Convert.ToBase64String(data)));
}
}
}
我要再次强调,在cookie中存储敏感信息是一种不鼓励的做法。如果您将问题更新为您想要完成的内容,可能有一个更合理的解决方案。为什么要在cookie中发送秘密值?您的问题写得不正确。指定一些更精确的内容,您需要其他信息。如何访问机密值?仅在服务器端还是在javascript中?机密值应存储多长时间?只要页面被打开或无限期(永久cookie)?为什么您想要/需要cookie中的秘密值?也许还有别的解决办法。请澄清!啊!!所以你不需要饼干->你需要代币!我建议从阅读以下内容开始:为什么要在cookie中发送一个秘密值?您的问题写得不正确。指定一些更精确的内容,您需要其他信息。如何访问机密值?仅在服务器端还是在javascript中?机密值应存储多长时间?只要页面被打开或无限期(永久cookie)?为什么您想要/需要cookie中的秘密值?也许还有别的解决办法。请澄清!啊!!所以你不需要饼干->你需要代币!我建议从阅读以下内容开始: