php مباشر نصائح حول ملفات تعريف الارتباط التي تم توقيعها بدلا من الجلسات




شبكة الجزيرة (3)

أنا جعلت كوكيستوراج بالضبط لهذا الغرض. يتم توقيع جميع القيم المخزنة بشكل آمن مع المفتاح الخاص بك عن طريق RIPEMD160 التجزئة (والمملحة مع مرور الوقت)، وتشفيريا اختياريا مع RIJNDAEL256.

يتم تخزين كل قيمة مع الطابع الزمني، والتي يمكن استردادها.

مثال موقع .
مثال مشفر .

إذا كنت تفضل ذلك، يمكنك استخدام تجزئة / تشفير / فك تشفير وظائف من اختيارك.

أنا أفكر في تخليص فب $_SESSION (أي التعامل مع جلسة الخادم من جانب، لإضافة بعض نكهة اللغة الملحد) واستخدام ملفات تعريف الارتباط وقعت بدلا من ذلك، لأنني سمعت الكثير من الجيد عنهم (يستخدم فليكر لهم، لذلك يجب أن تكون جيدة بما فيه الكفاية بالنسبة لي أيضا).

أنا أفهم السياق الأساسي للتقنية: استخدام ملفات تعريف الارتباط بحرية لتمرير أزواج القيمة الرئيسية من العميل إلى الخادم، والتوقيع عليها للتأكد من أن القيم لا العبث بها.

ولكن ما هي طريقة جيدة لتنفيذ جزء التوقيع؟ أيضا؛ نظرا لأن حركة المرور ربما تكون هتب، فهل هناك طريقة جيدة لإرسال بيانات حساسة (مثل كلمة مرور المستخدم) بهذه الطريقة، أثناء العمل ضد سرقة ملفات تعريف الارتباط و / أو العبث؟


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

الإجابة الأخرى على هذا السؤال قديمة. وأضاف فب 5.2 المعلمة httponly إلى وظيفة httponly ، إضافة فعليا دعم ملفات تعريف الارتباط الموقعة الأصلية. وفقا ل سيتكوكي وظيفة هتبونلي المعلمة الوثائق :

"عندما يتم تعيين [ترو] إلى ترو، سيتم الوصول إلى ملف تعريف الارتباط فقط من خلال بروتوكول هتب، وهذا يعني أن ملف تعريف الارتباط لن يكون في متناول لغات البرمجة مثل جافاسكريبت، وقد اقترح أن هذا الإعداد يمكن أن يساعد بشكل فعال على تقليل الهوية سرقة من خلال هجمات شس (على الرغم من أنها غير معتمدة من قبل جميع المتصفحات)، ولكن هذا الادعاء غالبا ما يكون موضع نزاع "

سيؤدي تعيين هذه المعلمة إلى ترو إلى تعطيل القدرة على تعديل ملف تعريف الارتباط هذا باستخدام أدوات أخرى مستندة إلى المتصفح، مثل ديفتولز من كروم. لجعل ملف تعريف الارتباط الموقع أكثر أمنا أوصي بشدة تضييق المسار أو المجال الذي يستخدم. يمكنك تحديد تلك التي تستخدم معلمات path domain . وبالطبع فإنه لا يضر أبدا لتأمين ملف تعريف الارتباط باستخدام المعلمة secure إذا كان يتم تحميل موقع الويب الخاص بك عبر هتبس. والنتيجة ستكون خط مثل هذا:

setcookie('signedCookie','uneditable value here', 0, '/', 'www.example.com', TRUE , TRUE);

لماذا تستخدم ملفات تعريف الارتباط الموقعة؟

في الواقع، هناك حالات محددة تكون فيها ملفات تعريف الارتباط الموقعة مفيدة في حين أن الأساليب الأخرى، مثل الجلسة، ليست كذلك. على سبيل المثال، لنفترض أن موقع الويب / التطبيق المعني يستخدم موازن تحميل لتحسين الأداء. الآن دعونا نفترض أيضا أن موازن الأحمال يحتوي على خوادم فعلية متعددة من الملفات التي يتم تقديمها وخيار جلسة لزجة غير متوفر. في مثل هذه الحالة وقعت الكوكيز هي تقريبا الطريقة الآمنة الوحيدة للحفاظ على الدولة في فب.


لماذا تهتم؟

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

يجب أن تهدف إلى الحفاظ على كمية البيانات ضيق جدا، لأنه سيتم إرسالها مع كل طلب.

مع أخذ ذلك في الاعتبار، فصاعدا ...

توقيع البيانات مع تجزئة

إذا كانت البيانات ليست حساسة، يمكنك التوقيع على القيم مع التجزئة sha1 مصنوعة من مزيج من أزواج مفتاح / قيمة وسرية مشتركة. على سبيل المثال

$values=array(
  'user_id'=>1,
  'foo'=>'bar'
);
$secret='MySecretSalt';

$plain="";
foreach($values as $key=>$value)
{
    $plain.=$key.'|'.$value.'|';
}
$plain.=$secret;
$hash=sha1($plain);

الآن إعطاء العميل ملف تعريف الارتباط مع جميع القيم و التجزئة. يمكنك التحقق من التجزئة عندما يتم تقديم ملف تعريف الارتباط. إذا كان تجزئة لك حساب من القيم المقدمة من قبل العميل لا يتطابق مع التجزئة المتوقع، كما تعلمون تم العبث القيم.

تشفير البيانات الحساسة

بالنسبة إلى البيانات الحساسة، ستحتاج إلى تشفير القيم. تحقق من تمديد مكريبت الذي يقدم الكثير من وظائف التشفير.

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

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

هناك تقنيات أخرى ل "أوتولين" ملفات تعريف الارتباط، التي تنطوي على إعطاء هذه الكوكيز قيمة رمزية التي تسمح فقط لاستخدامها مرة واحدة. وإليك مقالة جيدة عن هذه التقنية.

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

لمقالة لطيفة الذي يفسر سرقة الجلسة والاختطاف والتثبيت انظر الجلسات وملفات تعريف الارتباط التي تقدم عدد قليل من المزيد من التقنيات لمحاولة، مثل استخدام رأس وسر-إدجنت كتوقيع إضافي.





cookies