Как я могу установить флаг безопасности для файла cookie сеанса ASP.NET?

Как установить флажок Secure для файла cookie сеанса ASP.NET, чтобы он передавался только по протоколу HTTPS, а не по обычному HTTP?

4 ответа

Решение

Есть два способа, один httpCookies элемент в web.config позволяет включить requireSSL которые только передают все куки, включая сессию только в SSL, а также внутри аутентификации форм, но если вы включаете SSL в httpcookies, вы также должны включить его и внутри конфигурации форм.

Отредактируйте для ясности: вставьте это в <system.web>

<httpCookies requireSSL="true" />

В <system.web> элемент, добавьте следующий элемент:

<httpCookies requireSSL="true" />

Однако, если у вас есть <forms> элемент в вашем system.web\authentication блок, то это переопределит настройку в httpCookies, установив его обратно по умолчанию false,

В этом случае вам нужно добавить requireSSL="true" атрибут для элемента формы, а также.

Так что в итоге вы получите:

<system.web>
    <authentication mode="Forms">
        <forms requireSSL="true">
            <!-- forms content -->
        </forms>
    </authentication>
</system.web>

Смотрите здесь и здесь для MSDN документации этих элементов.

Все становится быстро, если вы говорите о проверенном коде в корпоративной среде. Мы обнаружили, что наилучшим подходом является наличие в файле web.Release.config следующего содержания:

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
  <authentication>
      <forms xdt:Transform="Replace" timeout="20" requireSSL="true" />
  </authentication>
</system.web>

Таким образом, разработчики не будут затронуты (работают в Debug), и только те серверы, которые получают сборки Release, требуют, чтобы куки были SSL.

Основываясь на ответе @Mark D, я бы использовал преобразования web.config, чтобы установить для всех различных файлов cookie значение Secure. Это включает настройкуanonymousIdentification cookieRequireSSL а также httpCookies requireSSL.

Для этого вам нужно настроить свой web.Release.config как:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
    <httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    <anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" /> 
  </system.web>
</configuration>

Если вы используете аутентификацию ролей и форм с ASP.NET Membership Provider (Я знаю, он древний), вы также захотите установить roleManager cookieRequireSSL и forms requireSSLатрибуты тоже безопасны. Если это так, ваш web.release.config может выглядеть следующим образом (включен выше плюс новые теги для API членства):

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
    <httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    <anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" /> 
    <roleManager xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
    <authentication>
        <forms xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    </authentication>
  </system.web>
</configuration>

Предыстория web.config преобразуется здесь: http://go.microsoft.com/fwlink/?LinkId=125889

Очевидно, это выходит за рамки исходного вопроса OP, но если вы не настроите их все для защиты, вы можете ожидать, что инструмент сканирования безопасности заметит, и вы увидите красные флажки в отчете. Спроси меня, откуда я знаю.:)

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

Другие вопросы по тегам