2014-01-15 6 views
5

У нас есть внешнее приложение, которое было проверено на прочность внешней охранной компанией. Приложение разработано на ASP.NET MVC4 и работает на сервере IIS8/Windows 2012 Server.Безопасный флаг для ASPXAUTH Cookie

Одна из указанных уязвимостей - ASPXAUTH не является безопасным. Когда я проверил инспектор файлов cookie, есть куки с флагом Secure. Но ASPXAUTH не был одним из них.

Я сделал несколько исследований, и установить эти флаги ниже на web.config

<forms loginUrl="~/Account/Login" timeout="2880" requireSSL="" name="AppName" /> 

и

<httpCookies httpOnlyCookies="true" requireSSL="true" /> 

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

Мои вопросы,

  1. С этими флагами на web.config, оказывает ASPXAUTH без безопасного флага проблема безопасности?
  2. Если да, не могли бы вы сказать мне, что правильный способ - отметить его как безопасный.

спасибо.

ответ

7

Я нашел этот кусок кода, который сделал мой аутентификации печенье безопасности. Я не могу вспомнить источник этого, но если вы добавите его в свой global.asax, он сортирует проблему. Я не знаю, почему, но requireSSL = true в вашем теге было недостаточно, чтобы сделать его безопасным.

protected void Application_EndRequest(Object sender, EventArgs e) 
    { 
     string authCookie = FormsAuthentication.FormsCookieName; 

     foreach (string sCookie in Request.Cookies) 
     { 
      if (sCookie.Equals(authCookie)) 
      { 
       // Set the cookie to be secure. Browsers will send the cookie 
       // only to pages requested with https 
       var httpCookie = Response.Cookies[sCookie]; 
       if (httpCookie != null) httpCookie.Secure = true; 
      } 
     } 
    } 
+0

@AnarchistGreek, не работает против AppScan от IBM. Он по-прежнему утверждает, что файл cookie не безопасен. –

+1

Вижу, ваш код нужно редактировать. Оператор foreach должен получить доступ к Request.Cookies вместо Response.Cookies. –

0

Ответ на ваш вопрос secong

Возможный дубликат How to secure .ASPXAUTH token

как в ответ на xelco

To prevent forms authentication cookies from being captured and tampered with while crossing the network, ensure that you use SSL with all pages that require authenticated access and restrict forms authentication tickets to SSL channels by setting requireSSL="true" on the <forms> element. 

To restrict forms authentication cookies to SSL channels set requireSSL="true" on the <forms> element, as shown in the following code: 

<forms loginUrl="Secure\Login.aspx" requireSSL="true" ... /> 

By setting requireSSL="true", you set the secure cookie property that determines whether browsers should send the cookie back to the server. With the secure property set, the cookie is sent by the browser only to a secure page that is requested using an HTTPS URL. 
+0

Спасибо. Я прочитал этот ответ, и это то, что я сделал, как я сказал в вопросе. Я сделал именно то, что описано, но cookie-маркер ASPXAUTH не помечается как безопасный. – AnarchistGeek

+0

Ненавижу повторять очевидное, но requireSSL - это то, как вы устанавливаете безопасный флаг cookie. https://www.owasp.org/index.php/SecureFlag. Одна вещь для проверки - это иерархия конфигурационных файлов.Он может быть установлен в верхнем web.config, но перезаписан в подкаталоге. Вы также можете проверить код. http://msdn.microsoft.com/en-us/library/system.web.httpcookie.secure%28v=vs.110%29.aspx – 0leg

4

Ваша проблема заключается в том, что ваша форма неверно настроена. У вас есть:

<forms loginUrl="~/Account/Login" timeout="2880" requireSSL="" name="AppName" /> 

и вы должны иметь

<forms loginUrl="~/Account/Login" timeout="2880" requireSSL="true" name="AppName" /> 

Согласно Microsoft атрибут requireSSL в httpCookies тега переопределяется атрибутом forms тега requireSSL. Вы не установили значение, но вы указали, что это может привести к тому, что IIS будет использовать значение по умолчанию false. Вы должны установить его на true.

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