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