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:
İki yol vardır, bir httpCookies
öğe yalnızca oturum dahil tüm tanımlama bilgilerini etkinleştirmenize web.config
izin verir requireSSL
ve 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" />
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 httpCookies
varsayı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>
roleManager
öğe varsa özniteliği cookieRequireSSL="true"
de true olarak ayarlanmalıdır. Ref. msdn.microsoft.com/en-us/library/…
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.
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.
@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 cookieRequireSSL
ve 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 cookieRequireSSL
ve forms requireSSL
niteliklerini 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. :)
<httpCookies requireSSL="true" />