मैं ASP.NET सत्र कुकी पर सुरक्षित ध्वज कैसे सेट कर सकता हूं?


146

मैं ASP.NET सत्र कुकी पर सुरक्षित ध्वज कैसे सेट कर सकता हूं, ताकि यह केवल HTTPS पर प्रसारित हो और सादे HTTP पर कभी न हो?

जवाबों:


127

दो तरीके हैं, एक httpCookiesतत्व web.configजो आपको चालू करने की अनुमति देता है requireSSLजिसमें केवल एसएसएल में सत्र सहित सभी कुकीज़ को प्रसारित किया जाता है और फॉर्म के प्रमाणीकरण के अंदर भी, लेकिन यदि आप एसएससी को httpcookies पर चालू करते हैं, तो आपको इसे अंदर के रूपों के कॉन्फ़िगरेशन पर भी चालू करना होगा।

स्पष्टता के लिए संपादन करें: इसे अंदर रखें<system.web>

<httpCookies requireSSL="true" />

13
+1 स्पष्ट करने के लिए, यह वही है जो आपको web.config में जोड़ना चाहिए ताकि सुरक्षित कुकी पर सुरक्षित ध्वज को सही पर सेट किया जा सके<httpCookies requireSSL="true" />
Tr1stan

8
ध्यान दें कि यह आपके (सर्वर-स्तर) कॉन्फ़िगरेशन पर निर्भर करता है। मैंने परीक्षण क्षेत्र को त्रुटि के साथ लाया "सुरक्षित कुकीज़ को जारी करने के लिए एप्लिकेशन को कॉन्फ़िगर किया गया है। इन कुकीज़ को ब्राउज़र को SSL (https प्रोटोकॉल) पर अनुरोध जारी करने की आवश्यकता होती है। हालांकि, वर्तमान अनुरोध SSL पर नहीं है।" ऐसा इसलिए था क्योंकि हमारे पास जगह में एक रिवर्स प्रॉक्सी है और ब्राउज़र इसे एसएसएल के माध्यम से कनेक्ट करते हैं लेकिन IIS सर्वर पर रिवर्स प्रॉक्सी 80 से अधिक है, इसलिए एप्लिकेशन को यह नहीं लगा कि यह सुरक्षित था।
mlDDev

4
@Bargitta हमने Application_PreSendRequestHeaders ईवेंट को संभाला और यदि एक निश्चित एप्लिकेशन सेटिंग सत्य है, तो हम सुरक्षित करने के लिए सभी कुकीज़ सेट करते हैं। यह एप्लिकेशन सेटिंग केवल हमारे HTTPS बाहरी साइटों के लिए सेट की गई है।
एमएलडीवी

मैं देख रहा हूं, इसलिए आपकी सभी बाहरी साइट HTTPS का उपयोग करेगी, धन्यवाद।
बरगिट्टा

मैंने कहीं और देखा है कि IIS7 system.web के बाद system.webserver द्वारा प्रतिस्थापित किया गया था, इसलिए मैंने इस सेटिंग को वहां डालने का प्रयास किया। IIS 8.5 पर यह एक कॉन्फ़िगरेशन त्रुटि के कारण होता है, लेकिन यह सब काम करता है अगर मैंने config फ़ाइल में एक system.web अनुभाग जोड़ा और सेटिंग को वहां डाल दिया।
इबोबोब

181

में <system.web>तत्व है, तो निम्न तत्व जोड़ें:

<httpCookies requireSSL="true" />

हालांकि, यदि <forms>आपके system.web\authenticationब्लॉक में एक तत्व है , तो यह सेटिंग को ओवरराइड करेगा httpCookies, इसे डिफ़ॉल्ट पर वापस सेट करेगा false

उस स्थिति में, आपको requireSSL="true"प्रपत्र तत्व के साथ विशेषता को भी जोड़ना होगा ।

तो आप के साथ खत्म हो जाएगा:

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

इन तत्वों के MSDN प्रलेखन के लिए यहाँ और यहाँ देखें ।


2
आप अपने <httpCookies आवश्यकताSSL = "सही" /> सेटिंग को 'लॉक इटेम' विशेषता सहित ओवर-राइड करने से अन्य वेब.कॉन्फ़िग सेटिंग्स से बच सकते हैं। जैसे: <httpCookies के लिएSSLL की आवश्यकता है = "सत्य" lockItem = "true" />। अधिक जानकारी यहाँ dotnetnoob.com/2010/11/how-to-secure-aspnet-cookies.html
JTech

1
इसके अलावा, अगर कोई roleManagerतत्व है तो उसकी विशेषता cookieRequireSSL="true"भी सही पर सेट होनी चाहिए। संदर्भ। msdn.microsoft.com/en-us/library/…
जेफ मर्गलर

संबंधित फ़ाइलों में उपरोक्त परिवर्तन जोड़कर, सत्र ऑब्जेक्ट मेरे अनुप्रयोग में काम नहीं कर रहे हैं, वे अशक्त हो रहे हैं। फिर मैं इस समस्या को कैसे ठीक कर सकता हूं?
शनि

क्या आप अपने ऐप के लिए HTTP या HTTPS का उपयोग कर रहे हैं? "सुरक्षित" ध्वज जो हम यहां स्थापित कर रहे हैं वह कुकीज़ को गैर-एन्क्रिप्टेड (यानी HTTP) कनेक्शन पर भेजा जा रहा है
मार्टिन ईडन

21

यदि आप एंटरप्राइज़ वातावरण में चेक-इन कोड के बारे में बात कर रहे हैं तो चीजें जल्दी गड़बड़ हो जाती हैं। हमने पाया है कि वेब के लिए सबसे अच्छा तरीका है ।elease.config में निम्नलिखित शामिल हैं:

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

इस तरह, डेवलपर्स प्रभावित नहीं होते हैं (डीबग में चल रहे हैं), और केवल सर्वर जो रिलीज़ बिल्ड प्राप्त करते हैं, उन्हें कुकीज़ को एसएसएल होने की आवश्यकता होती है।


^ ^ ^ ^ यह ^ ^ ^ जिस तरह से है। अधिक जानकारी फिर से: Web.Config रूपांतरण: go.microsoft.com/fwlink/?LinkId=125889
जेफ मर्गलर

0

सुरक्षित - यह विशेषता ब्राउज़र को केवल कुकी भेजने के लिए कहती है यदि अनुरोध HTTPS जैसे सुरक्षित चैनल पर भेजा जा रहा है। यह कुकी को अनएन्क्रिप्टेड अनुरोधों को पार करने से बचाने में मदद करेगा। यदि एप्लिकेशन को HTTP और HTTPS दोनों पर एक्सेस किया जा सकता है, तो संभावित है कि कुकी को स्पष्ट पाठ में भेजा जा सकता है।


0

@ मर्क डी के जवाब पर बिल्डिंग मैं सभी विभिन्न कुकीज़ को सुरक्षित करने के लिए सेट करने के लिए web.config ट्रांसफ़ॉर्म का उपयोग करेगा। इसमें सेटिंग anonymousIdentification cookieRequireSSLऔर शामिल हैं httpCookies requireSSL

उस छोर तक आप अपना वेब सेटअप करेंगे।

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

यदि आप ASP.NET Membership Provider(मैं जानता हूं, यह प्राचीन है) के साथ रोल्स और फॉर्म प्रमाणीकरण का उपयोग कर रहे हैं, तो आप roleManager cookieRequireSSLऔर forms requireSSLविशेषताओं को भी सुरक्षित करना चाहते हैं। यदि ऐसा है, तो आपका web.release.config इस तरह दिख सकता है (सदस्यता API के लिए नए टैग के ऊपर शामिल है)

<?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 पर पृष्ठभूमि यहां रूपांतरित होती है: http://go.microsoft.com/fwlink/?LinkId=125889

स्पष्ट रूप से यह ओपी के मूल प्रश्न से परे है, लेकिन यदि आप उन सभी को सुरक्षित करने के लिए सेट नहीं करते हैं, तो आप उम्मीद कर सकते हैं कि एक सुरक्षा स्कैनिंग उपकरण नोटिस करेगा और आपको रिपोर्ट पर लाल झंडे दिखाई देंगे। मुझसे पूछो कि मैं कैसे जानता हूं। :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.