php نقل التبديل بين صفحات HTTP و HTTPS مع ملف تعريف ارتباط جلسة عمل آمن



بروتوكول نقل النص الفائق (1)

تحديث: لاحظ أن كل موقع ويب يقوم بالتحويل بين HTTP غير الآمن وصفحات HTTPS المشفرة ، يكون عرضًا لا مفر منه SSL-strip . يرجى التفكير في استخدام HTTPS للموقع بأكمله ، على الرغم من أن هذا لا يمكن منع شريط SSL ، على الأقل هذا يعطي المستخدم إمكانية الاتصال بالموقع بأمان ، إذا كان يهتم. بالنسبة إلى المواقع التي تحتاج إلى التبديل ، ربما تظل هذه الطريقة هي الخيار الأفضل.

من السيناريوهات الشائعة ، أن يكون موقع الويب يحتوي على صفحات ذات بيانات حساسة ، والتي يجب الوصول إليها فقط مع protocoll HTTPS ، وأخرى تحتوي على بيانات غير حرجة.

لقد وجدت حلًا يسمح بالتبديل بين الصفحات الآمنة وغير الآمنة ، مع الاحتفاظ بالجلسة ، ونود أن نطلب منك أي تلميحات حول العيوب في المفهوم. يمكنك العثور هنا على المقالة بأكملها: جلسة عمل آمنة للمقهى مع طبقة المقابس الآمنة (بالطبع أنا سعيد أيضًا لسماعها ، أنها آمنة).

المشكلة

يضمن HTTPS أنه لا يمكن لأي شخص بين العميل والخادم أن يتنصت اتصالاتنا ويمنع هجوم رجل في الوسط. للأسف ، لا ينطبق ذلك على ملف تعريف الارتباط للجلسة ، بل يتم إرساله أيضًا إلى الطلبات غير المشفرة.

تقدم PHP الوظيفة session_set_cookie_params (...) مع المعلمة $ secure. هذا هو ما نحتاجه ، لكنه يتركنا للمشكلة التي نفقدها في جلستنا ، عندما نتحول إلى صفحة غير آمنة.

ملف تعريف الارتباط المصادقة

تكمن فكرة ملف تعريف الارتباط في أنه عندما يقوم المستخدم بإدخال كلمة المرور الخاصة به (يزيد من امتيازات الوصول الخاصة به) ، نقوم بإنشاء ملف تعريف ارتباط آخر بالإضافة إلى ملف تعريف الارتباط جلسة العمل غير الآمنة ، والتأكد من أن صفحات 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 المشفرة.

شكرا جزيلا لكل إجابة!


Answer #1

بديل أبسط: لقد أصبح بديلاً مقبولاً بشكل متزايد لاستخدام TLS طوال الوقت ، بدلاً من التبديل بين الاتصالات الآمنة وغير الآمنة. يتم إنفاق الجزء الأكبر من وقت المعالجة الإضافي على إعداد النفق الآمن ، ولكن يتم ذلك مرة واحدة فقط ويتم تخزينه مؤقتًا (عادة). يكون التشفير المتناظر لحركة المرور اللاحقة سريعًا جدًا جدًا على المعالجات الحديثة. تفكر إلى حد ما في الاعتقاد بأن هذا سيسبب مشكلة في الخادم أو قابلية التوسع.

في إحدى نشرات المدونات الأخيرة ، أفاد مهندس Google أنه عندما انتقلوا إلى استخدام HTTPS فقط في GMail ، وجدوا أنه قد تم زيادة سمعهم على الخادم بنسبة 4٪ فقط. (لا يمكن العثور على الاقتباس.)





session-cookies