2009-04-02 12 views
49

कई साइटें https का समर्थन करने लगती हैं लेकिन सुरक्षित कुकीज़ का उपयोग नहीं करती हैं। मैं अपनी साइट को सुरक्षित कुकीज़ का उपयोग करना चाहता हूं लेकिन इसके बजाय http का उपयोग करके कुछ सामग्री तक पहुंचने की अनुमति देना चाहता हूं।सुरक्षित कुकीज़ और मिश्रित https/http साइट उपयोग

ऐसा करने का एक समझदार तरीका वास्तविक सत्र के लिए एक सुरक्षित कुकी होना प्रतीत होता है, और एक गैर-सुरक्षित कुकी जो कि यह कहने के लिए सिर्फ ध्वज है कि उपयोगकर्ता लॉग इन है या नहीं (विभिन्न चीज़ों को प्रदर्शित करने के लिए हेडर, लॉगिन लिंक की बजाय लॉगआउट लिंक की तरह)। इस कुकी में कोई भी "वास्तविक" सत्र जानकारी नहीं होगी और यह साइट है कि साइट के http भागों पर लॉग-आउट वाले लोगों की तुलना में साइट लॉग-इन उपयोगकर्ताओं के लिए पृष्ठों को थोड़ा अलग तरीके से दिखा सकती है।

https के रूप में पूरी साइट होने एक और विकल्प है, लेकिन यह काफ़ी सादा http की तुलना में धीमी हो गया लगता है और इसलिए वास्तव में आदर्श नहीं है।

क्यों साइटों सेट अप इस तरह का प्रयोग नहीं करते और सुरक्षित कुकीज़ है? कुकी चोरी की संभावना आजकल सुरक्षित कुकीज़ को एक आवश्यकता बना रही है। क्या एक ही चीज़ हासिल करने का कोई बेहतर तरीका है?

+4

शायद क्योंकि सुरक्षित कुकीज़ और HTTP डॉन अच्छी तरह से एक साथ खेलना नहीं है? मैंने बिल्कुल इसे लागू करने की कोशिश की, लेकिन जब उपयोगकर्ता HTTPS छोड़ देता है (जहां तक ​​मैं बता सकता हूं) सुरक्षित कुकीज मिटा दी जाती हैं। http://stackoverflow.com/questions/16734090/http- पेज-रीमूविंग-माय-सुरक्षित-कुकीज –

उत्तर

31

समाधान आप का प्रस्ताव है जैसे कि यह, काम करेगा जब तक आप कोई आपत्ति नहीं है गैर अधिकृत लोगों को गैर-सुरक्षित (http) साइट 'के रूप में यदि वे में लॉग इन किया' का हिस्सा देखने के लिए सक्षम होने लगता है - यानी जब तक साइट के http भाग में कोई संवेदनशील जानकारी नहीं होती है, और लॉग इन इन और लॉग-इन-इन उपयोगकर्ताओं के बीच एकमात्र अंतर हेडर में कुछ हानिकारक है।

कारण यह बहुत बार इस्तेमाल नहीं किया है में से एक हो सकता है:

  • इस परिदृश्य अभी बहुत आम नहीं हो सकता है। आम तौर पर यदि आप अपनी साइट का सुरक्षित हिस्सा बनाने के लिए पर्याप्त देखभाल करते हैं, तो आप केवल उस सुरक्षित भाग में लॉगिन सत्र प्रतिबंधित कर देंगे, या आप पूरी साइट हमेशा HTTPS (जैसे पेपैल) का उपयोग करेंगे।
  • पूर्व-मौजूदा समाधान मौजूद हैं जो सुरक्षित हैं और जो इससे अधिक सक्षम हैं, उदाहरण के लिए किसी को HTTPS लॉगिन फ़ॉर्म में लॉग इन करना और उस सत्र को बनाए रखना, जबकि उन्हें वापस HTTP में स्थानांतरित करना। ओपनआईडी एक उदाहरण है। फ़्लिकर या जीमेल भी सोचें: उनका साइन इन पेज हमेशा HTTPS होता है, लेकिन एक बार सत्र शुरू होने के बाद आप सत्र को सुरक्षित रूप से बनाए रखते हुए HTTP पर वापस माइग्रेट कर देते हैं।

अद्यतन (अगस्त 2014)

जब से मैं 2009 में इस पीठ ने लिखा है, लॉगिन स्क्रीन के लिए सुरक्षित कनेक्शन होने लेकिन HTTP एक बार में लॉग इन करने के लिए वापस छोड़ने के अभ्यास सब है लेकिन गायब हो गया।

HTTPS साइड-वाईड का उपयोग करने के ऊपरी हिस्से को अब एक बड़ा सौदा नहीं देखा जाता है। Google द्वारा विकसित नया एसपीडीवाई प्रोटोकॉल (अब HTTP/2 में विकसित) क्रॉस-ब्राउज़र और प्रमुख वेब सर्वर द्वारा समर्थित है और HTTPS गति में सुधार करता है।

और आखिरकार, गोपनीयता को पहले से कहीं अधिक महत्वपूर्ण माना जाता है, यहां तक ​​कि प्रमाणीकरण के लिए महत्वपूर्ण नहीं हैं, जैसे टिप्पणियां लिखना, फ़ोटो अपलोड करना आदि।

Google ने हाल ही में यह भी कहा है कि एचटीटीपीएस-केवल साइटें ही खोज इंजन रैंकिंग में लाभान्वित होंगी।

+4

क्या आपके पास कुछ ऐसा लिंक है जो बताता है कि ओपनआई डी (या अन्य साइटें) आपको वापस HTTP पर माइग्रेट करने का प्रबंधन करती हैं लेकिन सत्र सुरक्षा बनाए रखती हैं? यही वह है जिसे मैं समझने में असफल रहा हूं: लॉगिन के लिए https और फिर कई साइटों पर असुरक्षित कुकीज़ और http सत्र ... –

+2

जिन चीजों को सबसे अधिक सुरक्षित रखने की आवश्यकता है वे लॉगिन प्रमाण-पत्र हैं: जो भी आपने लॉग इन करने के लिए आपूर्ति की है (उपयोगकर्ता नाम/पासवर्ड , या प्रमाण पत्र)। ओपनआईडी के साथ इन्हें स्वयं और ओपनआईडी प्रदाता के बीच HTTPS पर भेजा जाता है। ओपनआईडी सीधे क्लाइंट साइट के साथ संचार करता है, क्लाइंट को संवेदनशील – thomasrutter

+0

कुछ भी भेजने की आवश्यकता नहीं है, लेकिन क्लाइंट साइट पर क्रेडेंशियल्स का एक अलग सेट भेज रहा है - यानी ओपनआईडी प्रदाता की निजी कुंजी के साथ एन्कोड किए गए आपके ओपनआईडी यूआरएल का सबूत, तो क्लाइंट साइट जानता है कि ओपनआईडी प्रदाता इस व्यक्ति के लिए वाउच करता है। फिर, क्लाइंट साइट सत्र आईडी – thomasrutter

11

एक सुरक्षा दृष्टिकोण से, आप एक गैर सुरक्षित कनेक्शन पर भेजा किसी भी सामग्री पर भरोसा नहीं किया जाना चाहिए। तो इस बात को ध्यान में रखते हुए, एक अनएन्क्रिप्टेड कनेक्शन पर भेजे गए कुकी का उपयोग करना सुरक्षित है, अगर उस कुकी की चोरी या दुरुपयोग की लागत लगभग शून्य है।

इसे ध्यान में रखते

, सबसे साइटों ऐसे तैयार कर रहे हैं कि डेटा चैनलों के बीच "रिसाव" करने के लिए अनुमति नहीं है। आखिरकार, से आने वाले डेटा को पक्ष को आम तौर पर विशेषाधिकार प्राप्त किया जाता है, और इसलिए सामान्य चैनल में अनुमति नहीं दी जानी चाहिए, जबकि से आने वाले डेटा को अनएन्क्रिप्टेड चैनल संभावित रूप से धोखा दिया गया है, और विश्वसनीय नहीं होना चाहिए।

आप डेटा है कि उन सामान्यीकरण फिट नहीं करता है, तो आप के रूप में यह से कोई लेना देना कृपया के लिए स्वतंत्र महसूस हो, तो।

9

HTTP पर सत्र कुकीज़ स्थानांतरित करना मुझे थोड़ी देर के लिए परेशान कर रहा है। मुझे लगता है कि आपके द्वारा वर्णित तकनीक कुकीज़ को सुरक्षित करने का एकमात्र तरीका है, जबकि उपयोगकर्ताओं को लॉग इन होने पर HTTP पृष्ठों को ब्राउज़ करने के लिए लॉग इन करना संभव है। हालांकि, मैंने इसे शायद ही कभी लागू किया है।

साइटें इस तरह के सेट-अप का उपयोग क्यों नहीं करती हैं और सुरक्षित कुकीज़ हैं?

मुझे लगता है कि गोद लेने की कमी के लिए मुख्य कारण risk management है:

  • छिपकर बातें सुनने के माध्यम से सत्र टोकन चोरी जैसे तुलना में बहुत कठिन है क्रॉस-साइट स्क्रिप्टिंग (माना जाता है कि एक भेद्यता है)। आपको नेटवर्क तक पहुंच की आवश्यकता है (जैसे उपयोगकर्ता का लैन या आईएसपी)। इस प्रकार, जोखिम-आधारित प्राथमिकता डेवलपर्स के अनुसार पहले एक्सएसएस मुद्दों से निपटना चाहिए क्योंकि यह एक बड़ी हमले की सतह प्रदान करता है (हमले की संभावना बहुत अधिक है)।
  • सीएसआरएफ और यूआई रेड्रेसिंग (उर्फ क्लिक-जैकिंग) के लिए भी यही सच है।
  • यदि सत्रों का हैकिंग का व्यावसायिक प्रभाव उच्च है (उदाहरण के लिए वेब शॉप में बाद में उपयोग के लिए क्रेडिट कार्ड संग्रहीत करना), तो आप अपनी पूरी साइट को HTTPS पर सीमित करने से बेहतर हो सकते हैं।

एक अन्य कारण प्रयोज्य चिंताओं का उपयोग कर सकता है: आपकी प्रस्तावित योजना के साथ आप प्रभावी रूप से एक उपयोगकर्ता के लिए दो समवर्ती सत्रों का प्रबंधन कर रहे हैं। यह तब तक आसान है जब तक लॉग-इन-फ्लैग असुरक्षित सत्र में संग्रहीत एकमात्र राज्य है। यदि आप दोनों सत्रों के भीतर से भाषा और देश जैसी सेटिंग्स भी बदल सकते हैं तो यह गन्दा हो सकता है (लागू करने या उपयोग करने के लिए)।

क्या एक ही चीज़ प्राप्त करने का कोई बेहतर तरीका है?

The Web Application Hacker's Handbook से:

HTTP कुकी टोकन संचारित करने के लिए इस्तेमाल किया जा रहा है, तो ये कभी उन पर संचारण HTTP से उपयोगकर्ता के ब्राउज़र को रोकने के लिए secure रूप में चिह्नित किया जाना चाहिए। यदि व्यवहार्य हो, तो एप्लिकेशन के प्रत्येक पृष्ठ के लिए HTTPS का उपयोग किया जाना चाहिए, जिसमें स्थिर सामग्री जैसे सहायता पृष्ठ, छवियां आदि शामिल हैं।

गंभीरता से, पूरी साइट HTTPS का उपयोग करें। कुछ साल पहले यह संभवतः संभव नहीं था क्योंकि सीडीएन एचटीटीपीएस समर्थन प्रदान नहीं कर रहे थे। हालांकि, आज यह मुख्य रूप से विकास और परिचालन लागत को संतुलित करने का सवाल है।

+0

पर दोबारा पोस्ट करें, मैं सहमत हूं कि पूरी साइट के लिए HTTPS सबसे अच्छा समाधान है, लेकिन यदि आप डेविड के विचार को थोड़ा सा उलट देते हैं, तो आपको सभी पृष्ठों के लिए HTTPS का उपयोग करते समय भी एक अच्छा समाधान मिलता है। इस [उदाहरण] में (http://stackoverflow.com/questions/5843305/switching-between-http-and-https-pages-with-secure-session-cookie), सत्र कुकी असुरक्षित छोड़ दी गई है, लेकिन एक और सुरक्षित कुकी प्रमाणीकरण सुनिश्चित करता है। इस तरह आप सत्र और प्रमाणीकरण को बनाए रखने की दो चिंताओं को अलग कर सकते हैं। – martinstoeckli

+0

हां, यह ठीक से लागू होने पर निश्चित रूप से एक अच्छा समाधान है। मैं बस इतना कह रहा हूं कि अगर आप अपने सत्र कुकीज़ को सुरक्षित रखने के लिए पर्याप्त देखभाल करते हैं तो आप पूरी साइट एसएसएल के लिए भी जा सकते हैं और यह जांचने के लिए भूलने का जोखिम नहीं है कि ग्राहक वर्तमान में अपने सुरक्षित या असुरक्षित सत्र का उपयोग कर रहा है या नहीं किसी भी प्रतिबंधित डेटा को अद्यतन करें। – Pankrat

1

मुझे पूरी तरह से पता है कि अनुशंसित अभ्यास सिर्फ संपूर्ण साइट पर एसएसएल को मजबूर करना है।हालांकि, निश्चित रूप से अद्वितीय मामले हैं जहां HTTP और HTTPS के बीच चुनने और चुनने में सक्षम होना आसान हो सकता है।

मैं @Davavid Gardner के समान परिदृश्य में भाग रहा था। मेरी कंपनी हमारी साइट के हमारे स्टोर हिस्से को प्रबंधित करने के लिए एक थर्ड पार्टी विक्रेता का उपयोग करती है, और वह स्टोर सबडोमेन "https://store.mysite.com" पर रहता है। हमारे पास 15 साल की वीडियो सामग्री है, और एक एसएसएल में एक वीडियो एम्बेडेड होने पर हमारा वर्तमान वीडियो प्रबंधन विक्रेता टूट जाता है। (मुझे लगता है कि यह HTTP डोमेन से संसाधनों में खींच रहा है, लेकिन यह किसी अन्य दिन के लिए एक और समस्या है)

निश्चित रूप से, मैं एक एसएसएल खरीद सकता हूं और दो, तीसरे पक्ष के विक्रेताओं को डिबग करने की प्रक्रिया के माध्यम से जा सकता हूं किसी भी HTTP संसाधन लिंक को सही करने के लिए हमारे संपूर्ण डेटाबेस (या एक .htaccess फ़ाइल हैक, लेकिन मैं digress) पर एक खोज और प्रतिस्थापन, हेडर में एक संदेश प्राप्त करने में सक्षम होने के लिए "आपका स्वागत है" आपका नाम ", लेकिन ऐसा लगता है ओवरकिल की तरह

यहां एक साधारण जावास्क्रिप्ट समाधान है जो मैं आया हूं, जो कि पहले से सेट की गई सुरक्षित कुकीज़ के आधार पर साइट-व्यापी, असुरक्षित कुकी सेट करता है।

पहला, I grabbed some javascript cookie functions। आगे बढ़ो और अपनी साइट के सुरक्षित भाग में इस कोड डाल:

function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)===' ') { 
      c = c.substring(1,c.length); 
     } 
     if (c.indexOf(nameEQ) === 0) { 
      return c.substring(nameEQ.length,c.length); 
     } 
    } 
    return null; 
} 
function setCookie(cname, cvalue, exdays) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (exdays*24*60*60*1000)); 
    var expires = "expires="+d.toUTCString(); 

    /* Note, the W3 documents where I got this code didn't include the 
    option to set the domain. I added this and it allows the cookie 
    to be shared across sub-domains. Be sure not to add "www" */ 
    document.cookie = cname + "=" + cvalue + "; " + expires + "; domain=.yourdomain.com"; 
} 
/*Now we check our cookies on our secure server to find out if the user is 
logged in or not. In my case, the First Name is stored as a cookie. */ 
var firstNameCookie = readCookie("the-secure-cookie-name"); 
// 
if(!firstNameCookie){ 
    /* If the cookie doesn't exist, then the person isn't logged in. Add 
    conditional logic here if you'd like (such as deleting any current 
    logged in cookies from the HTTP portion of the site) */ 
} 
else { 
    /* otherwise, we have a successful login. By grabbing the cookie via 
    this javascript resting on the secure server, we haven't compromised our 
    security. However, if we set a cookie with javascript right now, it 
    won't be a secure cookie by default and we'll have access to it with 
    HTTP on the subdomain */ 
    setCookie("HTTPfirstName", firstNameCookie, 1.5); 
} 

*/The clients first name is now accessible across subdomains in the cookie 
    entitled "HTTPfirstName" */ 

इस उदाहरण में, केवल एक ही चीज़ हम अपने HTTP सर्वर के लिए खत्म हो गया है लीक ग्राहक का पहला नाम है। हालांकि, अगर आप और भी सुरक्षा चाहते हैं, तो आप अपनी सर्वर सेटिंग्स को केवल कुछ अनुरोधों (यानी "फर्स्टनामक्यूकी) को HTTP अनुरोध द्वारा एक्सेस करने की अनुमति दे सकते हैं, और यह सुरक्षा की एक अतिरिक्त परत जोड़ता है। You can learn how to do that here

निश्चित रूप से, यह सबसे आदर्श समाधान नहीं है। भविष्य में, मैं एसएसएल साइट-वाईड को लागू करने की योजना बना रहा हूं, लेकिन इस दौरान इसे बदलने के लिए एक सरल जावास्क्रिप्ट फ़ंक्शन होना निश्चित रूप से अच्छा है।

+1

दरअसल, चूंकि मैंने पूछा कि यह अभ्यास बहुत दुर्लभ हो गया है :) मैं आपके मामले में प्रॉक्सी का उपयोग करने का सुझाव दूंगा, जो बाहरी रूप से एसएसएल पहुंच प्रदान करता है लेकिन आंतरिक रूप से प्रॉक्सी को आपके मौजूदा वीडियो डेटाबेस में http के रूप में प्रदान करता है। फिर आप अपने मौजूदा सेटअप को रखते हुए उपयोगकर्ताओं को SSL'd कनेक्शन दे सकते हैं। एक्स-फॉरवर्डेड-हेडर्स का उपयोग करने के लिए आपको वीडियो बैकएंड लॉगिंग (और संभवतः अन्य आईपी-एड्रेस-सेंसिटिव पार्ट्स) को बदलने की आवश्यकता होगी, लेकिन उम्मीद है कि एसएसएल के साथ काम करने के लिए इसे पूरी तरह से ठीक करने से कम काम है? –

+0

मान्य है कि यह इस बात पर निर्भर करता है कि क्या आप वीडियो सामग्री के लिए कहीं और उपयोगकर्ताओं को सौंप रहे हैं या यदि यह आपके सर्वर से गुजरता है ... –

+1

हाँ, मैं समझता हूं कि यह एक बहुत ही अनूठी स्थिति है। मुझे प्रॉक्सी विचार पसंद है, लेकिन वीडियो डिलीवरी ब्राइटकोव (एक सीडीएन और पूरी तरह से बाहरी संसाधनों) के माध्यम से किया जाता है, इसलिए मुझे नहीं लगता कि यह मान्य होगा। मैं एक बड़ी कंपनी के लिए एकमात्र डेवलपर हूं, इसलिए दुर्भाग्य से, साइट-व्यापी एसएसएल परिनियोजन एक ऐसा कार्य होता है जो चीजों की एक बड़ी सूची के तहत दफनाया जाता है। एक 10 मिनट जावास्क्रिप्ट फिक्स अब के लिए एक महान अस्थायी समाधान होने के समाप्त हो गया है, और उम्मीद है कि किसी और को भी यह उपयोगी लगेगा। – Lucas

संबंधित मुद्दे