Вопрос по HttpCookies - PullRequest
       5

Вопрос по HttpCookies

1 голос
/ 01 мая 2011

Мне нужно сгенерировать cookie, которое имеет секретное значение, и я единственный, кто его знает.
Идеи?

ОБНОВЛЕНИЕ
У меня есть страница обработчика, доступная для всех, кому я звоню на эту страницу, чтобы получать RSSFeed с использованием Ajax.Что мне нужно сделать, так это помешать другим людям подделать HttpRequest и получить возвращенные данные. Я пытался использовать формы аутентификации, но не очень хорошо. Я слышал о материалах, не относящихся к токенам, но понятия не имею, как их использовать.!
ОБНОВЛЕНИЕ2
Прочитать это это точно моя проблема ..

1 Ответ

1 голос
/ 01 мая 2011

Как правило, хранение конфиденциальной информации в файле 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-файлах - это практика, от которой не следует отказываться. Если вы обновите свой вопрос до того, что пытаетесь достичь, возможно, найдется более разумное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...