2011-04-30 20 views
27

अद्यतन के साथ HTTP और HTTPS पृष्ठों के बीच स्विचिंग: ध्यान दें कि असुरक्षित HTTP और एन्क्रिप्टेड HTTPS पृष्ठों के बीच प्रत्येक वेबसाइट स्विचिंग SSL-strip के लिए अनिवार्य प्रवण है। कृपया पूरी साइट के लिए HTTPS का उपयोग करने के बारे में सोचें, हालांकि यह न तो एसएसएल-स्ट्रिप को रोक सकता है, कम से कम यह उपयोगकर्ता को साइट पर सुरक्षित रूप से कॉल करने की संभावना देता है, अगर वह परवाह करता है। उन साइटों के लिए जिन्हें स्विच करने की आवश्यकता है, यह विधि शायद अभी भी सबसे अच्छा विकल्प है।सुरक्षित सत्र-कुकी

यह एक आम परिदृश्य है, कि एक वेबसाइट में संवेदनशील डेटा वाले पेज हैं, जिन्हें केवल HTTPS प्रोटोकॉल और गैर-क्रिटिकल डेटा वाले अन्य लोगों तक पहुंचाया जाना चाहिए।

मुझे एक समाधान मिला जो सत्र को बनाए रखते हुए सुरक्षित और गैर सुरक्षित पृष्ठों के बीच स्विचिंग की अनुमति देता है और आपको अवधारणा में त्रुटियों के बारे में किसी भी संकेत के लिए पूछता है। पूरा लेख आप यहां पा सकते हैं: Secure session cookie with SSL (बेशक मुझे यह भी सुनकर खुशी हो रही है कि यह सुरक्षित है)।

समस्या

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

PHP फ़ंक्शन session_set_cookie_params (...) पैरामीटर $ सुरक्षित के साथ प्रदान करता है। यह वही है जो हमें चाहिए, लेकिन यह हमें इस समस्या पर छोड़ देता है कि जब हम असुरक्षित पृष्ठ पर जाते हैं तो हम अपना सत्र खो देते हैं।

प्रमाणीकरण कुकी

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

https://www.example.com/login.php 

<?php 
    session_start(); 
    // regenerate session id to make session fixation more difficult 
    session_regenerate_id(true); 

    // generate random code for the authentication cookie and store it in the session 
    $authCode = md5(uniqid(mt_rand(), true)); 
    $_SESSION['authentication'] = $authCode; 

    // create authentication cookie, and restrict it to HTTPS pages 
    setcookie('authentication', $authCode, 0, '/', '', true, true); 

    print('<h1>login</h1>'); 
    ... 
?> 

अब हर पृष्ठ (HTTPS और HTTP) असुरक्षित सत्र-कुकी को पढ़ सकता है, लेकिन संवेदनशील जानकारी के साथ पृष्ठों सुरक्षित प्रमाणीकरण कुकी के लिए देख सकते हैं।

https://www.example.com/secret.php 

<?php 
    session_start(); 

    // check that the authentication cookie exists, and that 
    // it contains the same code which is stored in the session. 
    $pageIsSecure = (!empty($_COOKIE['authentication'])) 
    && ($_COOKIE['authentication'] === $_SESSION['authentication']); 

    if (!$pageIsSecure) 
    { 
    // do not display the page, redirect to the login page 
    } 

    ... 
?> 

एक हमलावर सत्र कुकी में हेरफेर कर सकता है, लेकिन उसे प्रमाणीकरण कुकी तक कभी भी पहुंच नहीं है। केवल वह व्यक्ति जिसने पासवर्ड दर्ज किया है, प्रमाणीकरण कुकी का मालिक हो सकता है, यह हमेशा एन्क्रिप्टेड HTTPS कनेक्शन पर भेजा जाता है।

धन्यवाद हर उत्तर के लिए बहुत कुछ!

+0

लेकिन इसके साथ एक सहेजी गई सत्र आईडी अभी भी गैर-HTTPS पृष्ठों पर उपयोग की जा सकती है। – Gumbo

+2

यह सच है, लेकिन वह केवल अनैतिक डेटा देखेंगे। आप HTTPS वाले सभी पृष्ठों का अनुरोध कर सकते हैं, आपको आवश्यक लगता है। – martinstoeckli

+1

सभी साइटों को पूरी तरह से https बनाते हैं जो मैं प्रस्तावित करता हूं। न केवल इस तरह की समस्याओं को खत्म करता है, बल्कि यह आपकी साइट ब्राउज़ करने वाले हर किसी की सामान्य गोपनीयता में भी सुधार करता है। अधिक परेशान करने वाले मुद्दे आते हैं यदि आप कभी भी कई सर्वरों और विभिन्न डोमेन के बीच लॉगिन डेटा रखना चाहते हैं क्योंकि आप अलग-अलग स्थानों पर स्थित फाइलों को सेवा देना चाहते हैं ... – nus

उत्तर

23

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

हाल ही में एक ब्लॉग पोस्ट में, एक Google इंजीनियर ने बताया कि जब वे जीमेल के लिए केवल HTTPS पर स्विच करते थे, तो उन्होंने पाया कि उनके सर्वर में केवल 4% की वृद्धि हुई है। (उद्धरण नहीं मिल सकता है।)

+1

मैंने लेख भी पढ़ा है, और यह एक वास्तविक विकल्प प्रतीत होता है। एक बात मैंने सोचा था कि चित्रों जैसे सभी संसाधन भी एन्क्रिप्ट किए गए हैं और बाहरी शामिल होने के परिणामस्वरूप आंशिक रूप से एन्क्रिप्टेड पृष्ठ (अन्यथा असुरक्षित पृष्ठ पर) होगा। क्या आपके पास PHP कैशिंग के बारे में कोई जानकारी है, क्या यह HTTPS के साथ काम करता है? – martinstoeckli

+0

Google लेख कहीं भी [एडम लैंगली के ब्लॉग] पर है (http://www.imperialviolet.org/)। –

+4

आलेख लिंक: http://www.imperialviolet.org/2010/06/25/overclocking-ssl.html – stukelly

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