2015-11-27 3 views
3

Я работаю над веб-приложением (asp-mvc). У нас есть требование всегда использовать файлы cookie, которые являются защищенными. Я прочитал, что я хотел бы добавить в веб-конфигурации моего приложения: enter image description hereЛучшее понимание SECURED Cookies

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

Теперь проблема заключается в том, что в нашей среде разработки мы используем протокол HTTP, и только в нашей производственной среде мы используем протокол HTTPS.

На первой странице моего приложения у меня есть аутентификация captcha (мы используем dll captchaMVC). После того, как я защитил свои файлы cookie, добавив упомянутый код в web.config (в нашей среде разработки), страница captcha не загружается должным образом. У меня есть мысль, что, возможно, это потому, что я пытаюсь использовать защищенные файлы cookie через HTTP (вместо HTTPS) в моей среде разработки, и, возможно, в производственной среде все будет работать правильно. Может ли кто-нибудь пролить свет на эту тему?

ответ

3
HttpCookie.Secure = true; 

В documentation for HttpCookie.Secure property состояния:

Получает или задает значение, указывающее, следует ли передавать куки с помощью Secure Sockets Layer (SSL) - то есть, более чем только HTTPS.

Это сбивает с толку.

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

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

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

Вот что я использую безопасные куки-файлы по незащищенному соединению.

Response Haders: 

Response HTTP/1.1 200 OK 
Cache-Control private 
Content-Type text/html; charset=utf-8 
Server Microsoft-IIS/8.0 
Set-Cookie ASP.NET_SessionId=xxwcvdn22lietdqtvirucxzv; path=/; secure; HttpOnly 
X-AspNet-Version 4.0.30319 
Set-Cookie My=My Cookie Value; path=/; secure 
X-Powered-By ASP.NET 
Date Fri, 27 Nov 2015 13:14:00 GMT 
Content-Length 510 

А на пост обратно:

Request Headers: 

Request GET /Default2.aspx HTTP/1.1 
Accept text/html, application/xhtml+xml, */* 
Accept-Language tr-TR 
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko 
Accept-Encoding gzip, deflate 
Host localhost:59442 
DNT 1 
Connection Keep-Alive 

Таким образом, Вы не должны указать HttpCookie.Secure = true; для среды разработки, или в любой среде (тест, preprod, ветками и т.д.), которая не поддерживает SSL. Это означает наличие разных файлов web.config для этих сред, что в любом случае является обязательным, если вы сохраняете строку подключения и т. Д. В файле web.config.

Ответ на ваш вопрос будет, да, она должна работать на условиях, когда веб-сайт доступен через защищенное соединение (HTTPS)

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

+0

@guz Ozgul, благодарю вас за подробный ответ (+1). Я, вероятно, отмечу это как принятый ответ, я просто хочу подождать до вторника, когда версия будет загружена на производство, и убедитесь, что все работает так, как ожидалось. – DimaK

+0

Добро пожаловать. Прежде чем приступать к работе, убедитесь, что вы тестируете приложение с помощью SSL. Получение временного сертификата SSL легко и бесплатно –

Смежные вопросы