قصة بسيطة وراء تحديث الرموز والوصول

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


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


دعنا نتخيل أنك طالب يحب المال ولكن غالبًا ما يكون له رصيد في حسابه تقريبًا.


في الطريق إلى جامعتك ، تفتح تطبيق هاتفك المحمول للتحقق من رصيد حسابك.


لتظهر لك يحتاج تطبيق الرصيد إلى تنفيذ الطلب على الخادم المصرفي:


GET http://api.mybank.com/balance HTTP 1.1
ويتلقى الرد


{ balance: '$0.0' }


صورة


سيكون من الجيد إذا لم يكن هناك أحد إلا يمكنك التحقق من حسابك المصرفي. للقيام بذلك ، دعونا نضيف رأسًا خاصًا باسم المستخدم وكلمة المرور الفريدة:


`إذن: اسم المستخدم كلمة المرور


التخويل: JohnDwayson QWERTY1`


الآن يمكن للخادم المصادقة عليك من خلال اسم المستخدم وكلمة المرور الشخصية. هذا يعني أن زوج JohnDwayson QWERTY1 يحتاج إلى الاحتفاظ به في مكان سري على هاتفك المحمول ليكون محميًا من شخص لا يُسمح له بإنفاق أموالك. سيكون من الأفضل لو تمكنا من تجنب تخزين كلمة المرور ولكن لا أحد يريد إدخالها كثيرًا.


عندما نستخدم تطبيقنا المحمول لمدة 30 دقيقة في الحافلة ، فسيرسل كلمة مرورك عبر الشبكة عدة مرات في 30 دقيقة.


صورة


كل requset يحتوي على كلمة المرور
دعنا نواصل تجربة التفكير لدينا. أنت لا تزال في حافلة ويقوم تطبيقك بإرسال طلب إلى الخادم.


ماذا لو كان هناك احتيال يجلس حولك في حافلة ويستطيع أن يعترض حزمة http أو عدة حزم من هاتفك المحمول إلى خادم البنك؟


إذا قام التطبيق بتحديث المعلومات كل دقيقة ، فسيحتوي الاحتيال على 30 فرصة لتقاطع الطلبات والحصول على كلمة مرورك.


لنفترض أنه سرق رسائل 5-6. كلمة المرور الخاصة بك الآن مخترقة ويمكن للاحتيال استخدامها للوصول إلى معلومات حسابك.


صورة


رجل في منتصف يمكن أن يسمع كلمة المرور
ماذا يمكن أن يفعل مع هذه المعلومات؟ خبر سار أنه لا يستطيع إنفاق أموالك لأنه ليس لديك ... ولكن :) لا يمكنه أيضًا تغيير كلمة المرور الخاصة بك كما في هذه الحالة ستلاحظ ذلك ويمكنك استخدام الرسائل القصيرة من أحد البنوك لاستعادة كلمة المرور. لن تكون كلمة المرور القديمة المسروقة صالحة في هذه الحالة وسيوفر الطالب أمواله


ولكن ما يمكنه فعله هو الحفاظ على رصيدك بالتوازي معك. يمكنه بسهولة كتابة نص بيثون يقوم بفحص حسابك كل 10 ثوانٍ وبمجرد استلامك للمال ، يمكنه أن ينفق كل سنت واحد لشراء عملات البيتكوين. ربما يكون الأمر الأسوأ إذا كان سيناريو البرنامج سينفق من 5 إلى 10 كتب يوميًا ، ومن المحتمل ألا يتم ملاحظته خلال الأشهر أو السنوات.


صورة


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


سيكون من الجيد إذا لم نستخدم كلمة المرور الخاصة بنا كثيرًا في طلباتنا. للقيام بذلك ، يمكننا تقديم نقطة نهاية خاصة: http://api.mybank.com/login . سنرسل بيانات الاعتماد الخاصة بنا فقط إلى نقطة النهاية هذه وفي خادم الإرجاع سيتم إنشاء رمز مميز خاص بنا. فليكن مجرد سلسلة فريدة ، GUID ، يخزنها الخادم في قاعدة بياناته. دعونا ندعو هذه السلسلة الفريدة هي رمز الوصول. سنستخدمها بدلاً من اسم المستخدم وكلمة المرور لدينا في رأس كل طلب تتحدث مع الخادم. على غرار كلمة المرور ، دعونا نضبط وقت انتهاء صلاحية رمز الوصول.


صورة


لتحديث الرصيد ، لسنا بحاجة إلى كلمة مرور
دعنا نعيد إنتاج تجربة تفكيرنا.


نحن في الحافلة وسرق شخص ما طلبنا http للتحقق من التوازن. ولكن الآن الاحتيال لديه رمز الوصول فقط.


صورة


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


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


الآن النتائج أفضل. لا يمكن للاحتيال الوصول إلى بياناتنا إلا لمدة 10 دقائق بدلاً من 3 أشهر. لكن لا يزال لديه تغيير جيد لسرقة كلمة المرور الخاصة بنا وقد لا نلاحظ ذلك حتى يسرق أموالنا.


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


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


صورة


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


ما زلنا بحاجة إلى رمز وصول لتنفيذ الطلبات للحصول على بعض البيانات من الخادم. لذلك:


POST /login with username and password returns us refresh token
POST /renew with refresh token returns us access token
POST /balance with access token returns us actual balance


دعنا نعيد تجربتنا مرة أخرى.


نحن في الحافلة. طالبنا يتحقق من رصيده.


ولكن الآن يستخدم تطبيقنا رمز التحديث الذي تم تخزينه في مكان ما في ملف على الهاتف المحمول.


التطبيق يرسل طلبات مثل:


POST /renew
GET /balance
GET /balance
GET /balance
POST /renew
GET /balance
GET /balance
GET /balance


كما في وقت سابق ، يتقاطع المتسلل مع عدد قليل من الطلبات مع رمز وصول في حافلة.


نظرًا لأن وقت انتهاء صلاحية رمز الوصول هو 15 دقيقة ونحن نقوم بتحديث الرموز المميزة كل 10 دقائق.


يمكن للهاكر استخدام المعلومات المسروقة فقط لمدة 10 دقائق أو أقل.


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


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


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


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


انها قليلا من موضوع المقالة ولكن تجدر الإشارة إلى scope .
ماذا لو طلبنا / نجدد نقطة النهاية فقط لرمز الوصول الذي يمكن استخدامه حصريًا للتحقق من الرصيد؟
إذا كان المستخدم يريد أن ينفق بعض المال يجب أن يتلقى رمز مميز آخر مختلف لذلك؟ يمكننا أن نسمي هذه المعلمة "النطاق".
لذلك يمكننا أن نطلب / تجديد؟ النطاق = [التوازن ، الأخبار]. إذا كان القراصنة يسرقون هذا الرمز ، فلا يمكنه استخدامه لإنفاق أموالنا!


توفر الفكرة المستندة إلى رمزين أمانًا أفضل من مجرد استخدام كلمة مرور أو رمز مميز حسب التصميم. على عكس اختيار كلمة مرور أطول أو خوارزميات أمان أقوى.


كان هذا تفسيري للمفهوم الأساسي وراء الرموز وكيفية عملها.


في الممارسة العملية ، هناك بعض التطبيقات المختلفة لهذا المفهوم والتي يمكن غوغلها بسهولة.


ملاحظة صغيرة حول المرونة في اختيار وقت انتهاء الصلاحية لكلمة المرور والرموز.


يمكن أن يكون وقت انتهاء الصلاحية المعتاد:


لكلمة المرور هي 3-6 أشهر. انه لامر جيد أن يكون هذا القيد. كما يمكن سرقة قواعد البيانات ويمكن للمستخدم إعادة استخدام نفس كلمة المرور عبر الخدمات.


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


يمكن أن يكون وقت انتهاء صلاحية الرمز المميز للوصول من 10 إلى 60 دقيقة. يتطلب الوقت الأقصر مزيدًا من طلبات التجديد ، لكن الوقت الأطول يمكن أن يعطي المزيد من الفرص للاحتيال.


الخلاصة :


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

Source: https://habr.com/ru/post/ar456968/


All Articles