如何解决ASP.NET MVC C# 应用程序中安全可靠的 HTTPCookie 存储
我使用下面的类来处理 cookie 并使用它们在我的 ASP.NET MVC 应用程序中存储/读取值(例如购物车项目等)
1.我想知道值是否在浏览器中存储时没有任何安全性,任何人都可以查看其内容(使用以下实现)?我检查了值是否存储为一些十六进制值,但我怀疑此实现中是否存在任何特定的加密/安全性。
2.如何修改该类以将 cookie 值存储为加密信息?
using System;
using System.Web;
namespace My.Application.Sample
{
public class CookieStore
{
public static void SetCookie(string key,string value)
{
SetCookie(key,value,TimeSpan.FromDays(14));
}
public static void SetCookie(string key,string value,TimeSpan expires)
{
string encodedValue = HttpUtility.UrlEncode(value);
HttpCookie encodedCookie = new HttpCookie(key,encodedValue);
if (HttpContext.Current.Request.Cookies[key] != null)
{
var cookieOld = HttpContext.Current.Request.Cookies[key];
cookieOld.Expires = DateTime.Now.Add(expires);
cookieOld.Value = encodedCookie.Value;
HttpContext.Current.Response.Cookies.Add(cookieOld);
}
else
{
encodedCookie.Expires = DateTime.Now.Add(expires);
HttpContext.Current.Response.Cookies.Add(encodedCookie);
}
}
/// <summary>
/// Return value stored in a cookie by defined key,if not found returns empty string
/// </summary>
/// <param name="key"></param>
/// <returns> never returns null! :) </returns>
public static string GetCookie(string key)
{
string value = string.Empty;
try
{
HttpCookie cookie = HttpContext.Current.Request.Cookies[key];
//if (cookie != null)
//{
// // For security purpose,we need to encrypt the value.
// HttpCookie decodedCookie = HttpSecureCookie.Decode(cookie);
// value = decodedCookie.Value;
//}
if (cookie != null)
{
string encodedValue = cookie.Value;
value = HttpUtility.UrlDecode(encodedValue);
}
}
catch (Exception)
{
}
return value;
}
}
}
解决方法
您可以使用Protect 和Unprotect 方法来加密cookie。请注意,两个字节具有相同的键值。使用 Protect 加密的数据只能使用 Unprotect 解密。
加密方法
public string encryptedCookie(string value)
{
var cookieText = Encoding.UTF8.GetBytes(value);
var encryptedValue = Convert.ToBase64String(MachineKey.Protect(cookieText,"ProtectCookie"));
return encryptedValue;
}
解密方法
public string decryptedCookie(string value)
{
var bytes = Convert.FromBase64String(value);
var output = MachineKey.Unprotect(bytes,"ProtectCookie");
string result = Encoding.UTF8.GetString(output);
return result;
}
您可以使用您的唯一键来代替 "ProtectCookie"
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。