Güvenli bayrağını bir ASP.NET Oturum Tanımlama Bilgisinde nasıl ayarlayabilirim?


149

Güvenli bayrağını bir ASP.NET Oturum Tanımlama Bilgisinde nasıl ayarlayabilirim, böylece yalnızca HTTPS üzerinden ve hiçbir zaman düz HTTP üzerinden iletilemez?

Yanıtlar:


131

İki yol vardır, bir httpCookiesöğe yalnızca oturum dahil tüm tanımlama bilgilerini etkinleştirmenize web.configizin verir requireSSLve aynı zamanda form kimlik doğrulaması da içerir, ancak httpcookies üzerinde SSL'yi açarsanız, form yapılandırmasını da açmanız gerekir.

Netlik için düzenleyin: Bunu yazın<system.web>

<httpCookies requireSSL="true" />

14
+1 <httpCookies requireSSL="true" />
Açıklığa kavuşturmak

9
Bunun (sunucu düzeyi) yapılandırmanıza bağlı olduğunu unutmayın. Test Bölgesini "Uygulama güvenli tanımlama bilgileri yayınlayacak şekilde yapılandırıldı. Bu tanımlama bilgileri tarayıcının isteği SSL üzerinden (https protokolü) yayınlamasını gerektiriyor. Ancak, mevcut istek SSL üzerinden değil." Bunun nedeni, yerinde bir ters proxy'ye sahip olmamız ve tarayıcıların ona SSL yoluyla bağlanması, ancak IIS sunucusuna ters proxy'nin 80 numaralı bağlantı noktasının üzerinde olması, dolayısıyla uygulamanın güvenli olduğunu düşünmemesiydi.
mlhDev

5
@Bargitta Application_PreSendRequestHeaders olayını ele aldık ve belirli bir uygulama ayarı doğruysa, tüm çerezleri güvenli olacak şekilde ayarlarız . Bu uygulama ayarı yalnızca HTTPS harici sitelerimiz için belirlenir.
mlhDev

Görüyorum ki, tüm harici siteniz HTTPS kullanacak, teşekkürler.
Bargitta

IIS7 system.web'in system.webserver ile değiştirilmesinden sonra başka bir yerde görmüştüm, bu yüzden bu ayarı oraya koymayı denedim. IIS 8.5'te bu bir yapılandırma hatasına neden oldu, ancak yapılandırma dosyasına bir system.web bölümü ekleyip ayarı oraya koyarsam hepsi işe yaradı.
Eborbob

184

Gelen <system.web>eleman, aşağıdaki öğeyi ekleyin:

<httpCookies requireSSL="true" />

Bununla birlikte, bloğunuzda bir <forms>eleman varsa system.web\authentication, bu, içindeki ayarı geçersiz kılarak httpCookiesvarsayılana geri döndürür false.

Bu durumda, requireSSL="true"özniteliği form öğesine de eklemeniz gerekir .

Böylece şununla sonuçlanacaksın:

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

Bu öğelerin MSDN belgeleri için buraya ve buraya bakın .


3
"LockItem" özelliğini ekleyerek diğer web.config ayarlarının <httpCookies requireSSL = "true" /> ayarınızı geçersiz kılmasını önleyebilirsiniz. Şöyle: <httpCookies requireSSL = "true" lockItem = "true" />. Daha fazla bilgi burada dotnetnoob.com/2010/11/how-to-secure-aspnet-cookies.html
JTech

2
Ek olarak, eğer bir roleManageröğe varsa özniteliği cookieRequireSSL="true"de true olarak ayarlanmalıdır. Ref. msdn.microsoft.com/en-us/library/…
Jeff Mergler

Yukarıdaki değişiklikleri ilgili dosyalara ekleyerek, oturum nesneleri uygulamamda çalışmıyor, boş hale geliyorlar. o zaman bu sorunu nasıl düzeltebilirim?
satya

Uygulamanız için HTTP veya HTTPS mi kullanıyorsunuz? Burada ayarladığımız "güvenli" bayrak, çerezlerin şifrelenmemiş (yani HTTP) bağlantılar üzerinden gönderilmesini engelliyor
Martin Eden

21

Kurumsal bir ortamda kontrol edilen koddan bahsediyorsanız işler hızla karışır. En iyi yaklaşımın web.Release.config dosyasının aşağıdakileri içermesi olduğunu bulduk :

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

Bu şekilde, geliştiriciler etkilenmez (Hata Ayıklama'da çalışır) ve yalnızca Sürüm yapılarını alan sunucular, tanımlama bilgilerinin SSL olmasını gerektirir.


^^ ^ Bu ^^ ^ yoldur. Daha fazla bilgi:
Web.Config

0

güvenli - Bu öznitelik, tarayıcıya tanımlama bilgisini yalnızca istek HTTPS gibi güvenli bir kanal üzerinden gönderiliyorsa göndermesini söyler. Bu, çerezin şifrelenmemiş istekler üzerinden aktarılmasını önlemeye yardımcı olacaktır. Uygulamaya hem HTTP hem de HTTPS üzerinden erişilebiliyorsa, çerezin açık metin olarak gönderilme olasılığı vardır.


0

@Mark D'nin cevabına dayanarak, tüm çeşitli çerezleri Güvenli olarak ayarlamak için web.config dönüşümlerini kullanırdım. Bu, ayarı içerir anonymousIdentification cookieRequireSSLve httpCookies requireSSL.

Bu amaçla web.Release.config dosyanızı şu şekilde kurarsınız:

<?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>

Rolleri ve Form Kimlik Doğrulamasını ASP.NET Membership Provider(biliyorum, eskidir) ile kullanıyorsanız, roleManager cookieRequireSSLve forms requireSSLniteliklerini de güvenli olarak ayarlamak isteyeceksiniz . Öyleyse, web.release.config'iniz şöyle görünebilir (yukarıda artı üyelik API'si için yeni etiketler dahil):

<?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 ile ilgili arka plan dönüşümleri burada: http://go.microsoft.com/fwlink/?LinkId=125889

Açıkçası bu, OP'nin orijinal sorusunun ötesine geçiyor, ancak hepsini güvenli hale getirmezseniz, bir güvenlik tarama aracının bunu fark edeceğini ve raporda kırmızı bayraklar göreceksiniz. Nasıl bildiğimi sor bana. :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.