حماية PHP: أين وكيف يتم تخزين كلمات المرور. الجزء 1

كل عام ، تحدث المزيد والمزيد من هجمات القراصنة في العالم: من سرقة بطاقات الائتمان إلى اختراق مواقع المتاجر على الإنترنت. هل أنت متأكد من أن برامجك محمية حقًا؟ تحسبا لبدء دورة "Backend PHP Developer" ، أعد زميلنا منشورًا مثيرًا للاهتمام حول الأمن في PHP ...




مقدمة


تعتبر فضيحة Facebook و Cambridge Analytica ، وتسرب مراسلات الحزب الديمقراطي الأمريكي في عام 2016 ، وانتهاك بيانات Google في عام 2018 ، و Yahoo Voice hack في عام 2012 ، مجرد أمثلة قليلة على التسريبات الرئيسية المسجلة خلال السنوات القليلة الماضية.

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

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

توفر لغة PHP العديد من الأدوات والوظائف التي يمكنك استخدامها لضمان أمان التطبيق.

3 قواعد أمان كلمة المرور




يجب أن تظل كلمات مرور المستخدم غير معروفة لك.


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

القاعدة العامة هي هذه: يجب ألا تعرف كلمات مرور المستخدمين فقط - يجب ألا تكون قادرًا على التعرف عليها. هذا هو جانب خطير للغاية والتي قد تستتبع حتى المسؤولية القانونية.

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

لا تدخل قيود كلمة المرور


هيا نلعب لعبة واحدة. حاول تخمين كلمة المرور:

**********

صعب ، أليس كذلك؟ لنجرب هذا:

P * r *** e ***

أنت تعرف الآن أن هناك حرفًا كبيرًا وعددًا كبيرًا من الأحرف الكبيرة. وإذا كان الأمر كذلك:

P * r *** e911

الآن سيكون من الأسهل بالنسبة لك تخمين كلمة المرور - لأنك تعلم أنها تتضمن حرفًا كبيرًا وأحرفًا كبيرة ورقمًا.

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

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

بالمناسبة ، الإجابة الصحيحة على اللغز أعلاه هي "Porsche911" :)

لا تقم أبداً بإرسال كلمات المرور عن طريق البريد الإلكتروني في أنقى صورها


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

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

  1. إنه يعرف كلمة المرور الخاصة بك.
  2. يخزن كلمة مرورك في أنقى صورها ، دون استخدام أي تشفير.
  3. لا يشعر بأدنى قدر من القلق عند إرسال كلمات المرور عبر الإنترنت.

رداً على ذلك ، لا يوجد خيار سوى صرف مثل هذا الموظف.

إليك ما يجب أن يفعله مطور الويب:

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

بمجرد أن يتبع المستخدم الرابط ، سيقوم التطبيق بتأكيد الوصول الصحيح ويسمح للمستخدم بتغيير كلمة المرور.

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

كيفية تجزئة كلمات مرور المستخدم




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

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

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

SHA-1


كان هذا تاريخيا وظيفة التجزئة الأولى. يرمز اختصار SHA-1 إلى "خوارزمية التجزئة الآمن" ، التي طورتها وكالة الأمن القومي الأمريكية.

كان SHA-1 مشهورًا ويستخدم على نطاق واسع في PHP لإنشاء سلسلة سداسية عشرية 20 بايت بطول 40 حرفًا.

تستخدم صناعة SSL SHA-1 للتوقيعات الرقمية لعدة سنوات. بعد ذلك ، بعد تحديد بعض نقاط الضعف ، قررت Google أن الوقت قد حان للتبديل إلى SHA-2.
تم إهمال الإصدار الأول من الخوارزمية في عام 2005. بعد ذلك ، تم تطوير إصدارات جديدة واعتمادها للاستخدام: SHA-2 و SHA-2 و SHA-256.

Bcrypt


تمكنت Bcrypt ، وليس نتيجة للتطور الطبيعي لـ SHA ، من جذب جمهور واسع بسبب مستوى الأمان.

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

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

Argon2


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

يتم تقديم Argon2 في 3 إصدارات:

  1. يصل Argon2d إلى مجموعة من الذاكرة ، مما يقلل من الذاكرة والوقت. ومع ذلك ، لديه خطر الهجوم من خلال قنوات الطرف الثالث.
  2. Argon2i هو عكس Argon 2d. هو الأمثل للهجمات على قنوات الطرف الثالث والوصول إلى الذاكرة بطريقة مستقلة عن كلمة المرور.
  3. Argon2id هو إصدار وسيط بين نسختين سابقتين.

هذه الوظيفة لها 6 معلمات: تسلسل كلمة المرور ، الملح ، تكلفة الذاكرة ، تكلفة الوقت ، عامل التوازي (الحد الأقصى المسموح به لعدد الخيوط المتوازية) ، طول التجزئة.

في الجزء الثاني من المقالة ، سوف أخبرك بكيفية استخدام التجزئة في PHP باستخدام الوظائف المدمجة ، والآن أريد دعوة الجميع إلى خادم الويب المجاني عبر الإنترنت "ServerLess PHP" ، حيث سنتعرف على مفهوم Serverless ، ونتحدث عن تنفيذه في AWS ، قابلية التطبيق ، الأسعار. سنقوم بتحليل مبادئ التجميع والإطلاق ، وكذلك بناء TG- روبوت بسيط يعتمد على AWS Lambda.

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


All Articles