关于HttpCookies的问题

时间:2011-05-01 18:47:28

标签: c# asp.net security cookies

我需要生成一个具有秘密值的cookie,我是唯一知道它的人。
想法?

更新
我有一个处理程序页面,我可以调用此页面来使用Ajax获取RSSFeed。我需要做的是阻止其他人伪造HttpRequest并获得返回的数据我试图使用身份验证表单但是我也听不到nonce令牌的东西,但我不知道如何使用它。 !
UPDATE2
Read This这正是我的问题..

1 个答案:

答案 0 :(得分:1)

通常将敏感信息存储在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中是一种应该不鼓励的做法。如果您将问题更新为您要完成的任务,也许有更合理的解决方案。

相关问题