अद्यतन के साथ 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 कनेक्शन पर भेजा जाता है।
धन्यवाद हर उत्तर के लिए बहुत कुछ!
लेकिन इसके साथ एक सहेजी गई सत्र आईडी अभी भी गैर-HTTPS पृष्ठों पर उपयोग की जा सकती है। – Gumbo
यह सच है, लेकिन वह केवल अनैतिक डेटा देखेंगे। आप HTTPS वाले सभी पृष्ठों का अनुरोध कर सकते हैं, आपको आवश्यक लगता है। – martinstoeckli
सभी साइटों को पूरी तरह से https बनाते हैं जो मैं प्रस्तावित करता हूं। न केवल इस तरह की समस्याओं को खत्म करता है, बल्कि यह आपकी साइट ब्राउज़ करने वाले हर किसी की सामान्य गोपनीयता में भी सुधार करता है। अधिक परेशान करने वाले मुद्दे आते हैं यदि आप कभी भी कई सर्वरों और विभिन्न डोमेन के बीच लॉगिन डेटा रखना चाहते हैं क्योंकि आप अलग-अलग स्थानों पर स्थित फाइलों को सेवा देना चाहते हैं ... – nus