Безопасно ли размещать данные в файлах cookie? - PullRequest
14 голосов
/ 08 июля 2010

Я использую asp.net mvc 2.0 и мне интересно, насколько безопасно хранить информацию в cookie-файле?

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

string encryptedTicket = FormsAuthentication.Encrypt(authTicket)
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

Как будто я не храню пароль или что-то в этом роде, но я хочу сохранить UserId, потому что в настоящее время каждый раз, когда пользователь отправляет запрос на мой сайт, я должен выполнить запрос и получить для этого пользователя идентификатор пользователя, поскольку каждая таблица в БД требует, чтобы вы использовали userId, чтобы вернуть правильный ряд.

Таким образом, они начинают быстро складываться, поэтому я предпочитаю, чтобы, если пользователь прошел аутентификацию один раз, то все, пока он не должен был пройти повторную аутентификацию. Если бы я сохранил этот userId, я мог бы сохранить столько запросов в базу данных.

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

Покажите, насколько хорошо это шифрование, которое использует Аутентификация?

Ответы [ 14 ]

0 голосов
/ 09 июля 2010

Ограничения на использование файлов cookie: размер, может быть отключен и риск для безопасности (подделка). Конечно, если вы зашифруете cookie, это может привести к снижению производительности. Сессия и Viewstate были бы хорошей альтернативой. Если вы хотите, чтобы он хранился на стороне клиента, viewstate будет лучше. Вы можете зашифровать строку userid и сохранить в viewstate. Сессия будет лучшим вариантом. Если ваша база данных работает медленно, рассмотрим кеширование

VIEWSTATE

0 голосов
/ 09 июля 2010

Первое, на что нужно обратить внимание - это безопасные соединения. Если это не так, предположим, что файл cookie или что-то еще между вами и клиентом будет перехвачено.

Файл cookie может быть обязательным, если он находится на клиентском компьютере. Рассмотрите кражу файлов cookie, подделку межсайтовых запросов, запутанную проблему заместителя.

0 голосов
/ 08 июля 2010
HttpCookie c;
c.Secure = true;

Очевидно, что это работает только при передаче через SSL, но этот параметр говорит браузеру не отправлять cookie, если соединение не является SSL, что предотвращает перехват с помощью атак «человек посередине». Если вы не используете безопасное соединение, данные в файле cookie полностью видны всем, кто пассивно анализирует соединение. Это, кстати, не так маловероятно, как вы думаете, учитывая популярность общественного Wi-Fi.

0 голосов
/ 08 июля 2010

Чтобы обеспечить надлежащую защиту файлов cookie для проверки подлинности, необходимо указать безопасную схему шифрования / хеширования (обычно в файле web.config), установив свойство machineKey validation = "SHA1" (я использую SHA1, но при желании вы можете заменить его другим провайдером). Затем убедитесь, что для проверки подлинности ваших форм установлен атрибут protection = "All" , чтобы файл cookie хешировался и шифровался. Безотказность и безопасность данных, все в одном:)

ASP.NET будет обрабатывать шифрование / дешифрование [РЕДАКТИРОВАТЬ: только файл cookie для аутентификации! ] для вас, хотя для пользовательских файлов cookie можно использовать метод FormsAuthentication.Encrypt (...) просто убедитесь, что вы не отправляете UserId с помощью другого открытого текста, например строки запроса.

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