Безопасно ли помещать данные в файлы cookie?

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

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

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

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

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

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

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


person chobo2    schedule 08.07.2010    source источник
comment
Вместо этого рассмотрите возможность использования HTTP-сессии.   -  person jweyrich    schedule 08.07.2010


Ответы (14)


Наряду с шифрованием файлов cookie вы также должны внедрить вращающийся токен для предотвращения повторных атак.

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

ОБНОВЛЕНИЕ
В одном из комментариев меня спросили, хотел ли я сохранить значение в файле cookie. Ответ положительный. ВЕСЬ файл cookie должен быть зашифрован, что может быть сделано автоматически с помощью HttpModule. Внутри зашифрованного файла cookie находится любая ваша обычная информация + токен изменения.

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

В результате ваш файл cookie является безопасным (вы используете 3DES?), и у любого злоумышленника будет крайне ограниченное окно возможностей даже для попытки повторной атаки. Если жетон не прошел проверку, можно было просто забить тревогу и принять соответствующие меры.

Все, что требуется на стороне сервера, — это отслеживать пользователя и его текущий токен. Обычно это гораздо меньшее попадание в БД, чем поиск таких мелочей, как имя пользователя при каждой загрузке страницы.

ОБНОВЛЕНИЕ 2
Я пытался выяснить, лучше это или хуже, чем сохранение изменяющегося значения в сеансе. Вывод, к которому я пришел, заключается в том, что хранение меняющегося значения в сеансе на веб-сервере абсолютно ничего не делает для предотвращения повторных атак и, следовательно, менее безопасно, чем помещение этого значения в файл cookie.

Рассмотрим этот сценарий. Браузер делает запрос. Сервер просматривает идентификатор сеанса и извлекает объекты сеанса, затем выполняется работа, и ответ отправляется обратно в браузер. Тем временем BlackHat Bob зафиксировал транзакцию.

Затем Боб отправляет точно такой же запрос (включая идентификатор сеанса) на сервер. На данный момент у сервера нет абсолютно никакой возможности узнать, что это запрос от злоумышленника. Вы не можете использовать IP, так как они могут измениться из-за использования прокси, вы не можете использовать отпечатки пальцев браузера, так как вся эта информация была бы записана при первоначальном обмене. Кроме того, учитывая, что сеансы обычно длятся не менее 30 минут, а иногда и намного дольше, у злоумышленника есть достаточно большое окно для работы.

Итак, несмотря ни на что, чтобы предотвратить повтор, вы должны отправлять изменяющийся токен в браузер после каждого запроса.

Теперь у нас остается вопрос о том, следует ли также сохранять такие значения, как идентификатор пользователя, в зашифрованном файле cookie или хранить его на стороне сервера в переменной сеанса. С сеансом у вас есть проблемы, такие как более высокая загрузка памяти и процессора, а также потенциальные проблемы с балансировкой нагрузки и т. Д. С файлами cookie у вас есть некоторый объем данных, который составляет менее 4 КБ и, если все сделано правильно, в диапазоне 1 КБ или меньше, который добавляется к каждому запросу. Я предполагаю, что это сведется к тому, хотите ли вы добавить больше серверов большего размера и внутреннего сетевого оборудования для обработки запросов (сессии) или заплатить за немного больший интернет-канал (куки).

person NotMe    schedule 08.07.2010
comment
Вы должны быть более конкретными. Я предполагаю, что вы не хотите хранить токен в файле cookie? - person mikerobi; 08.07.2010
comment
это имеет смысл, я думал, что вы, возможно, ссылаетесь на токен анти-CSRF, который не может быть сохранен в файле cookie. Это отличное решение для безопасного хранения данных в куки, но я не вижу никаких преимуществ перед традиционными сессиями. - person mikerobi; 09.07.2010

Шифрование достаточно хорошее, это не слабое звено.

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

Итак, информация в куки достаточно безопасна, но вы не можете защитить сам куки.

person Guffa    schedule 08.07.2010
comment
-1 это грубое злоупотребление криптографией, лучше вообще избегать этой проблемы. - person rook; 08.07.2010
comment
@The Rook: Так что не так с ответом? Вы голосуете против моего ответа, потому что считаете, что с вопросом что-то не так? - person Guffa; 09.07.2010
comment
@Guffa Я проголосовал за тебя, потому что не хочу, чтобы кто-то пытался совершить эту ошибку. Сеансы предназначены для сопоставления браузера с данными на стороне сервера, в этом случае использование шифра в файле cookie противоречит цели. - person rook; 09.07.2010
comment
@The Rook: Так почему же только этот ответ ничего не говорит о том, хорошая это идея или нет, и ни один из ответов, в которых на самом деле говорится, что шифровать файлы cookie — это хорошая идея? - person Guffa; 10.07.2010
comment
@Guffa, к сожалению, этот пост имеет тег безопасности, и я голосую против любого, кто предлагает небезопасный подход. Это немного авторитарный ход, но распространение слабых разработок вредит людям, и поэтому его следует подавлять. Не принимайте это на свой счет, если вы измените свой пост, говоря, что шифрование только добавляет больше сценариев атак, которых можно легко избежать, я дам вам +1. - person rook; 10.07.2010
comment
@The Rook: Ваша мотивация не имеет смысла, поскольку вы явно не проголосовали ни за один из ответов, которые фактически продвигают шифрование. - person Guffa; 10.07.2010
comment
@Guffa Я обновил свой пост, и я думаю, вам будет интересно. Я также проголосовал за другие сообщения, которые были неверными. Я голосую по посту, а не по человеку ;). - person rook; 11.07.2010
comment
@The Rook: лучший способ - даже не хранить соленый хэш в куки - person Frank R.; 13.07.2010
comment
@Frank Computer Я не уверен, зачем ты кладешь соленый хэш в печенье. Файл cookie должен быть очень большим случайным значением, если это хэш пароля, вам не нужно разбивать хэш для аутентификации. - person rook; 13.07.2010
comment
@The Rook: Возможно, вся концепция использования файлов cookie ошибочна!.. Должен быть метод битера. Мне никогда не нравилась идея о том, что веб-сайты могут собирать информацию о профилях посетителей веб-сайтов. Когда я работаю в сети, я использую InPrivate Browsing в IE. Есть также несколько других аспектов Интернета, которые я считаю дырами в безопасности. Еще одна причина, по которой ни один из моих клиентов не запускает свои бизнес-приложения в системе, подключенной к Интернету. Для этого у них есть еще одна автономная система. - person Frank R.; 14.07.2010
comment
@Frank Computer Вау, это новинка. Безопасность для меня заключается в том, чтобы сделать вещи менее полезными. Сети невероятно полезны, и многие предприятия не могут без них функционировать, а многие атаки невозможны без доступа к сети. Файлы cookie слишком полезны, и при правильной реализации они могут быть очень безопасными. Тем не менее, я не думаю, что вы хорошо разбираетесь в безопасности, потому что вы используете IE, который, без сомнения, является наименее безопасным программным обеспечением из когда-либо созданных. (Это зависит от количества найденных уязвимостей и количества дней, оставшихся без исправлений.) - person rook; 14.07.2010
comment
@The Rook: Думал, мои замечания будут для вас новинкой!.. Файлы cookie реализованы правильно?.. В том-то и проблема, что нет!.. Слишком много сложностей с HTML, .NET и т. д., что создает дыры в безопасности. Все это требует редизайна, включая скрытие исходного кода, файлов cookie и всего остального. Лучший способ защиты — запретить доступ к любой информации, включая файлы cookie. Итак, если просмотр IE8 InPrivate наименее безопасен, что лучше?.. Я использую отдельный компьютер исключительно для просмотра веб-страниц и не храню на нем личную информацию.. Это лучшее, что я могу сделать, чтобы защитить конфиденциальную информацию. - person Frank R.; 14.07.2010
comment
@Frank Computer Сделайте все на OWASP A3: Broken Authentication and Session Management, а затем используйте только файлы cookie http. После того, как вы это сделаете, злоумышленник будет искать слабые места в другом месте. С точки зрения безопасности браузера я бы использовал Firefox или Chrome, работающие в Linux. Также используйте Evince или другую программу для чтения PDF вместо Adobe Acrobat Reader. К сожалению, вспышка по-прежнему остается слабым местом. Но это лучше, чем месячный справочный центр IE 0-day, который был исправлен... вчера (надеюсь, вы обновились :) - person rook; 14.07.2010
comment
-1 атака заполнения оракула asp.net вышла после этого поста. Но это полностью поддерживает мой аргумент. @Guffa не пишет системы безопасности, ваш подход ошибочен. - person rook; 07.10.2010
comment
Я не минусовал этот и не буду. Помещение важных данных в зашифрованный файл cookie меня устраивает, если вы правильно используете аутентифицированное шифрование (скажем, AES-CBC с HMAC в схеме «зашифровать-затем-mac» со случайным IV). Это может быть не самое мудрое решение (излишняя зависимость от криптографии, возможность критических ошибок безопасности), но это не всегда плохо. Но я думаю, что FormsAuthentication.Encrypt был плохим в то время, когда вы писали свой ответ. Таким образом, Рук беспокоится о том, что шифрование может быть потенциальной атакой, имеет некоторые основания, даже если он немного преувеличивает ИМО. - person CodesInChaos; 25.01.2013
comment
Я никому не говорил минусовать ваши старые ответы. Я только что разместил ссылку на ваш ответ, рекомендующий хеширование пароля SHA-1. Затем некоторые решили просмотреть ваши старые ответы, связанные с безопасностью, чтобы проверить, дают ли они плохой совет. Я не думаю, что этот ответ достоин отрицательного ответа, но суждения могут отличаться. Для меня это только избегание, если это возможно, и будьте очень осторожны, если вы его используете, другие могут иначе оценить риск и считать это активно опасным. (При использовании простого AES-CBC это опасно) - person CodesInChaos; 25.01.2013

Название вашего вопроса на самом деле не соответствует тому, что вы спрашиваете. Вы спрашиваете здесь две разные вещи.

1. Существует ли безопасный способ хранения данных в файле cookie?

Ответ положительный. Чтобы безопасно хранить данные в файле cookie, вы должны зашифровать данные, которые хотите сохранить, а затем подписать зашифрованные данные. Шифрование не позволяет злоумышленникам читать данные, а подписание не позволяет злоумышленникам изменять данные. Это обеспечит целостность данных. Вы можете использовать этот метод для хранения данных о пользователе, которого вы хотите сохранить в тайне (его адрес электронной почты, дата рождения и т. д.). Примечание. Безопасное хранение данных в файле cookie не является безопасным способом аутентификации пользователя! Если вы сохранили идентификатор пользователя в подписанном и зашифрованном файле cookie, ничто не мешает злоумышленнику украсть весь файл cookie. и отправить его обратно на сервер. Невозможно узнать, поступил ли файл cookie аутентификации из того же браузера, в котором пользователь ввел свое имя пользователя и пароль. Что приводит нас ко второму вопросу (тот, который вы на самом деле задавали)...

2. Существует ли безопасный способ аутентификации пользователя с помощью файла cookie?

да. Чтобы безопасно аутентифицировать пользователя, вы должны объединить методы из вопроса 1 с SSL (https). SSL гарантирует, что только браузер сможет получить доступ к файлу cookie аутентификации (подписанному зашифрованному файлу cookie с идентификатором пользователя). Это означает, что ваш процесс входа в систему (принятие имени пользователя и пароля, а также установка файла cookie для аутентификации) должен происходить через SSL. Вы также должны установить для свойства HttpCookie.Secure значение true, когда вы устанавливаете файл cookie проверки подлинности на сервере. Это говорит браузеру включать этот файл cookie только при отправке запросов на ваш сайт через SSL. Вы также должны указать время истечения срока действия в зашифрованном файле cookie аутентификации, чтобы защититься от того, что кто-то забудет выйти из вашего сайта, пока они находятся в библиотеке. Побочным эффектом этого подхода является то, что только страницы вашего сайта, использующие SSL, смогут аутентифицировать пользователя. Отсюда возникает третий вопрос...

3. Как безопасно аутентифицировать пользователя без использования SSL?

Вы не знаете. Но у вас есть варианты. Одна из стратегий заключается в создании двух куки-файлов аутентификации при входе в систему, одного обычного куки-файла и одного только для ssl (хотя и зашифрованного, и подписанного). При выполнении конфиденциальных операций от имени пользователя требуется, чтобы страница была в SSL и использовала файл cookie только для SSL. При выполнении неконфиденциальных операций (например, при просмотре магазина, настроенного в зависимости от страны, в которой находится их учетная запись), вы можете использовать обычный файл cookie для аутентификации. Другой вариант — разделить страницу, чтобы информация, требующая знания пользователя, извлекалась асинхронно через AJAX или json. Например: вы возвращаете всю страницу блога через http, а затем делаете запрос SSL AJAX, чтобы получить текущее имя пользователя, адрес электронной почты, изображение профиля и т. д. Мы используем оба этих метода на веб-сайте, над которым я работаю.

Я знаю, что этот вопрос был задан почти год назад. Я пишу это для потомков. :-)

person Robert Sweeney    schedule 24.02.2011

Как вы сказали, хорошей практикой хранения любых данных в файлах cookie является шифрование данных. Зашифруйте перед помещением в куки и расшифруйте после прочтения.

В примере с сохранением идентификатора пользователя выберите то, что вряд ли будет использоваться против вашей системы. Для идентификатора пользователя используйте guid, а не вероятное целое число с приращением, которое представляет собой PK в таблице базы данных. Этот guid нелегко изменить, чтобы угадать другого пользователя во время атаки на вашу систему.

Как только пользователь будет идентифицирован или аутентифицирован, продолжайте и сохраните объект пользователя или ключевые свойства в Session.

person p.campbell    schedule 08.07.2010
comment
Возможно, вы захотите увидеть следующий http-модуль для автоматического шифрования файлов cookie: codeproject.com/KB/IP/ - person NotMe; 08.07.2010

В идеальном мире с идеальным шифром это не было бы проблемой. К сожалению, в реальном мире нет ничего идеального, и никогда не будет идеального шифра. Безопасность заключается в устранении этих угроз реального мира. Криптографические системы всегда уязвимы для атаки, независимо от того, будет ли это тривиальная (грубая сила) атака или ошибка в самом примитиве. Кроме того, наиболее вероятно, что вы испортите реализацию примитива, распространенные ошибки включают неслучайный или нулевой IV, управление ключами и неправильный режим блочного шифрования.

Короче говоря, это грубое злоупотребление криптографией. Эту проблему лучше всего решить, избегая всего этого вместе с помощью переменной сеанса. Вот почему сеансы существуют. Весь смысл в том, чтобы связать браузер с данными состояния, хранящимися на сервере.

изменить: шифрование файлов cookie привело к атаке заполнения оракула ASP.NET . Всего этого нужно было избежать, используя криптографический одноразовый номер. Как я уже сказал, это грубое злоупотребление криптографией.

person rook    schedule 08.07.2010
comment
Я полностью согласен. Правильный способ — сохранить идентификатор пользователя в объекте сеанса и избежать проблем, связанных с текущим решением: выбрать хороший алгоритм, правильно внедрить шифрование, защитить и сохранить ключи, избежать повторных атак и т. д. Правило должно быть таким: если он не нужен на стороне клиента, он не должен идти на сторону клиента. - person flpmor; 09.07.2010
comment
Вопрос ОП полностью вращается вокруг безопасности, а запись в блоге Джеффа игнорировала очень реальную проблему повторных атак. Просто включить его в сеанс и забыть о нем, имхо, на том же уровне, что и непонимание того, что делает ваш код шифрования. - person NotMe; 09.07.2010
comment
@Chris Lively, я согласен, большинство программистов думают, что шифрование - это просто какая-то волшебная палочка, они не понимают, насколько сложно его реализовать. - person rook; 09.07.2010

Для вашего конкретного сценария (идентификатор пользователя) краткий ответ: НЕТ!

Для длинного ответа представьте себе этот гипотетический сценарий:

  1. Вы переходите на stackoverflow.com;
  2. Введите имя пользователя/пароль и отправьте форму;
  3. Сервер отправляет вам файл cookie, содержащий ваш идентификатор пользователя, который будет использоваться для вашей идентификации при следующих запросах;
  4. Поскольку ваше соединение НЕ было защищенным (HTTPS), злоумышленник перенюхал его и захватил файл cookie.
  5. Злоумышленник получает доступ к вашей учетной записи, потому что сервер не сохранил, скажем, ваш IP-адрес и, следовательно, не может отличить вашу машину от машины злоумышленника.

В этом сценарии представьте, что сервер сохранил ваш IP-адрес, но вы находитесь в корпоративной локальной сети, а ваш внешний IP-адрес такой же, как и у других 100 машин. Представьте, что кто-то, имеющий доступ к одной из этих машин, скопировал ваш файл cookie. Ты уже понял, да? :-)

Мой совет: помещайте конфиденциальную информацию в сеанс HTTP.

ОБНОВЛЕНИЕ: наличие сеанса подразумевает наличие файла cookie (или, по крайней мере, уродливого URL-адреса), что возвращает нас к той же самой проблеме: его можно перехватить. Единственный способ избежать этого — добавить сквозное шифрование: HTTP+SSL = HTTPS. И если кто-то скажет: «О, но файлов cookie/сеансов должно быть достаточно, чтобы отпугнуть большинство людей», проверьте Огненная овца.

person jweyrich    schedule 08.07.2010
comment
Существуют также способы прослушивания сеансов, но я согласен с принципом, что вам нужно быть осторожным с файлами cookie. - person Joel Coehoorn; 08.07.2010

Это нормально (не очень хорошо, но и не неправильно) с точки зрения безопасности. Однако с точки зрения производительности этого следует избегать.

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

Лучший (общий) подход — просто сохранить отдельный токен в файле cookie, который вы используете в качестве ключа для поиска информации в базе данных. Вызовы базы данных также относительно медленны (по сравнению с наличием информации, уже находящейся в памяти или в запросе), но поиск первичного ключа, подобный этому, неплох, и это все же лучше, чем отправка данных потенциально на четверть пути по всему миру на каждом шагу. запрос. Это также лучше с точки зрения безопасности, потому что данные максимально защищены от компьютера пользователя и сети. Этот токен не должен быть чем-то вроде идентификатора пользователя из вашего вопроса, а скорее чем-то более недолговечным ключом, используемым для индексации и сокрытия больших блоков данных, частью которых, возможно, является ваш идентификатор пользователя.

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

person Joel Coehoorn    schedule 08.07.2010
comment
Я считаю довольно бесполезным предлагать хранить идентификатор в файле cookie, который используется для поиска данных, когда это именно то, о чем сомневался ОП. - person Chris Marisic; 08.07.2010
comment
@Chris - я добавил несколько предложений в конец, которые, надеюсь, прояснят ситуацию. - person Joel Coehoorn; 08.07.2010
comment
Я полагаю, вы имеете в виду асимметричный, а не асинхронный. - person rmeador; 08.07.2010
comment
Сессия падает при запуске нескольких веб-серверов. В этот момент сеанс необходимо сохранить/извлечь либо обратно на сервер базы данных, либо в ферму кэша памяти. Если вы храните сессию в базе данных, то вы эффективно увеличиваете количество вызовов базы данных, поскольку .net будет с удовольствием запрашивать, десериализовать, сериализовать и снова запрашивать для каждого вызова страницы. - person NotMe; 09.07.2010
comment
Это подводит нас к балансировке того, лучше или хуже небольшой файл cookie, передаваемый по сети, чем увеличение сложности сайта и необходимость обращения веб-сервера к другим машинам в вашей сети (db или memcache) для извлечения данных. Учитывая, что некоторые сайты с радостью отправляют контент в диапазоне от 40 до 50 КБ+, небольшой файл cookie размером 1 КБ или меньше на самом деле не так уж много накладных расходов. - person NotMe; 09.07.2010

Использование, на которое вы смотрите, является точной предполагаемой целью хранения информации в билете проверки подлинности форм.

person Chris Marisic    schedule 08.07.2010

Нет. Он был показан с Атака оракула заполнения, при которой получение зашифрованных данных (CBC) может быть опасным из-за утечки ошибок.

Я определенно не эксперт по криптографии, но недавно я видел демонстрацию, в которой зашифрованное состояние просмотра было расшифровано с помощью этой атаки.

person h3xStream    schedule 08.07.2010

Шифрование значения идентификатора пользователя в файле cookie не позволяет пользователю узнать, что это за значение. Это не

  • предотвратить воспроизведение файлов cookie (используйте SSL, чтобы злоумышленник не перехватил файл cookie жертвы)
  • предотвратить фальсификацию (злоумышленник все еще может вслепую перевернуть биты в закодированном файле cookie с вероятностью, что он будет декодирован до действительного идентификатора пользователя, используйте HMAC, чтобы предотвратить это)
  • полностью предотвратить получение пользователем расшифрованного значения (пользователь может перебрать значение в автономном режиме, использовать надежный ключ шифрования, чтобы сделать успех менее вероятным)

Шифрование файла cookie также создает проблему управления ключами. Например, когда вы меняете ключ шифрования, вы должны быть уверены, что «живые» сеансы со старым ключом не будут немедленно прерваны. Вы думали об управлении ключом шифрования, верно? Что происходит, когда администраторы уходят? Он скомпрометирован? и Т. Д.

Ваша архитектура (балансировщики нагрузки, распределение серверов и т. д.) не позволяет использовать объекты сеанса на стороне сервера для отслеживания этой информации? Если нет, привяжите идентификатор пользователя к объекту сеанса и оставьте «конфиденциальные» данные на сервере — пользователю нужен только файл cookie сеанса.

Объект сеанса, вероятно, будет намного проще и безопаснее для вашей заявленной проблемы.

person Mike    schedule 08.07.2010

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

ASP.NET будет обрабатывать шифрование/дешифрование [EDIT: только файл cookie авторизации!] файл cookie для вас, хотя для пользовательских файлов cookie вы можете использовать метод FormsAuthentication.Encrypt(...), поэтому просто сделайте убедитесь, что вы не отправляете UserId через другие средства открытого текста, такие как строка запроса.

person Josh E    schedule 08.07.2010
comment
Не совсем. Это не шифрует ВСЕ куки-файлы, а только ролевые куки-файлы при использовании поставщика членства. - person NotMe; 08.07.2010
comment
правда, но он использует FormsAuthentication.Encrypt(authTicket), который будет использовать настройки шифрования web.config - person Josh E; 08.07.2010
comment
Алгоритм хеширования не является алгоритмом шифрования. - person rook; 11.07.2010
comment
правильно, поэтому я сказал, что файл cookie будет и хэширован, и зашифрован - person Josh E; 12.07.2010

HttpCookie c;
c.Secure = true;

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

person Brian    schedule 08.07.2010

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

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

person Rab    schedule 08.07.2010
comment
Это не имеет ничего общего с вопросом ОП. - person rook; 11.07.2010
comment
Это актуально. Вопрос OP заключается в том, чтобы поместить [эти] данные в безопасные файлы cookie. Мое 1-е утверждение заключается в том, что любое незащищенное соединение ставит под угрозу куки-файл, подвергая его неправомерному использованию. Это, вероятно, самое слабое звено, и он/она заявил, что информация не должна распространяться в открытом виде. Что ж, с тем же успехом это мог быть обычный текст, если кто-то может получить его и использовать так же, как клиент. Во-вторых, файлы cookie могут быть использованы на клиентской машине, когда они выходят из-под контроля OP; перечислены методы, используемые для этого. Ответ на вопрос, не безопасный. Молодец, что предложил альтернативный подход. - person Rab; 11.07.2010

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

Состояние просмотра

person PRR    schedule 09.07.2010