Шифровать куки в ASP.NET - PullRequest
       46

Шифровать куки в ASP.NET

22 голосов
/ 05 декабря 2010

Я бы хотел зашифровать куки в ASP.NET.

Я следовал методу, описанному в этой статье , но у него есть недостаток, заключающийся в использовании отражения во внутреннем методе. Это привело к тому, что он будет помечен в обзоре кода - он не предназначен для будущего, поскольку внутренняя реализация может измениться.

Существует ли метод с идентичной функциональностью, который не требует использования шифрования для внутренних методов?

Я использую .NET Framework 3.5 SP1 (предположим, я не могу изменить версии фреймворка)

Ответы [ 2 ]

33 голосов
/ 14 марта 2013

Вам больше не нужно наматывать свои собственные.

.Net 4.5 имеет MachineKey.Protect() и MachineKey.Unprotect().

System.Web.Security.MachineKey

.Net 4.0 имеет MachineKey.Encode() и MachineKey.Decode(). Вы должны просто установить MachineKeyProtection на «Все». Теперь они устарели, и вы должны использовать более новые, если у вас есть 4.5.

Обратите внимание, что если вы попытаетесь использовать их в чем-то вроде консольного приложения вместо ASP.Net, то при каждом перезапуске приложения создается новый ключ. Я только быстро это проверил, но в ILSpy похоже, что он генерирует свои собственные значения по умолчанию, если отсутствует соответствующий app.setting.

Мне не удалось найти не -ASP.Net-эквивалент.

19 голосов
/ 05 декабря 2010

Почему бы просто не использовать шифрование, найденное в System.Security.Cryptography , чтобы зашифровать и расшифровать имя и значение файла cookie, когда они чувствительны? Вы можете написать несколько служебных функций, чтобы управлять ими довольно легко. Примеры функций утилит:

private static void SetEncryptedCookie(string name, string value)
{
    var encryptName = SomeEncryptionMethod(name);
    Response.Cookies[encryptName].Value = SomeEncryptionMethod(value);
    //set other cookie properties here, expiry &c.
    //Response.Cookies[encryptName].Expires = ...
}

private static string GetEncryptedCookie(string name)
{
    //you'll want some checks/exception handling around this
    return SomeDecryptionMethod(
               Response.Cookies[SomeDecryptionMethod(name)].Value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...