Включение SSL в файлах cookie для реальных сред и не SSL в средах разработки - PullRequest
3 голосов
/ 09 ноября 2010

В основном, на моем сайте есть требование, которое означает, что все куки должны быть защищены. Я пытаюсь защитить cookie-файл FormsAuthentication, однако мне бы хотелось, чтобы на моем локальном сайте разработчика мне не приходилось настраивать SSL, однако действующие сайты по-прежнему будут защищать cookie.

Этот статус в реальном времени / dev хранится в файле конфигурации xml. Этот файл содержит настройки для каждого компьютера, на котором работает сайт. Доступ к нему можно получить через Config.IsSecure

if (Config.IsSecure)
{
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, login.Username, DateTime.Now, DateTime.Now.AddMinutes(30), false, "User", FormsAuthentication.FormsCookiePath);

    string cookieStr = FormsAuthentication.Encrypt(ticket);
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr);
    cookie.Path = FormsAuthentication.FormsCookiePath;


    System.Configuration.Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");
    AuthenticationSection authenticationSection = (AuthenticationSection)configuration.GetSection("system.web/authentication");
    FormsAuthenticationConfiguration formsAuthentication = authenticationSection.Forms;
    formsAuthentication.RequireSSL = true;
    cookie.Secure = true;
    configuration.Save()
}

FormsAuthentication.SetAuthCookie(login.Username, false);

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

Есть идеи, как мне это решить?

Gurpreet

Ответы [ 3 ]

2 голосов
/ 09 ноября 2010

Я не совсем понимаю, что вы пытаетесь сделать, или почему вы должны были написать собственный код, чтобы сделать это.Я считаю, что вы можете настроить проверку подлинности с помощью форм для использования SSL для файлов cookie в файле web.config.Тогда просто создайте другой файл web.config для работы и разработки.

Атрибут requireSSL должен делать именно то, что вы хотите?(установите cookie только в безопасном режиме, чтобы браузеры возвращали куки-файл формы только при безопасном соединении).

1 голос
/ 09 ноября 2010

Если вы не хотите управлять двумя файлами web.config, другим вариантом будет просто установить сертификат на локальном компьютере - это действительно не сложно сделать.

Я думаю, что ответ на Как создать самозаверяющий подстановочный SSL-сертификат для IIS 6? содержит необходимую информацию. Просто убедитесь, что вы правильно задали имя хоста - либо имя вашего компьютера, либо localhost, либо вы получите предупреждение при попытке подключения к вашему сайту.

Также возможно выполнить преобразования в web.config, если вы используете VS2010 / .net 4, я считаю: http://msdn.microsoft.com/en-us/library/dd465318.aspx

0 голосов
/ 09 ноября 2010

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

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

Обновление:

HttpCookie.Secure делает только одно - если нет SSL, он не будет передавать cookie клиенту. Полученный заголовок файла cookie не будет содержать ваш файл cookie, если доступ к сайту осуществляется по HTTP. HttpCookie.Secure не заставит сайт переключиться на SSL, он просто молча нарушит ваш код, если я правильно понимаю документы.

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