سؤال أمان أياكس:توفير أسماء المستخدمين المتاحة بشكل حيوي

StackOverflow https://stackoverflow.com/questions/1061272

سؤال

أقوم بتصميم نموذج تسجيل بسيط في ASP.NET MVC 1.0 أريد السماح لاسم المستخدم بالتحقق من صحة المستخدم أثناء الكتابة (وفقًا للأسئلة ذات الصلة المرتبطة أدناه)

كل هذا سهل بما فيه الكفاية. ولكن ما هي الآثار الأمنية لمثل هذه الميزة؟

كيف أتجنب إساءة الاستخدام من الأشخاص الذين يقومون بإلغاء هذا لتحديد قائمة أسماء المستخدمين الصالحة؟

بعض الأسئلة ذات الصلة: 1, 2

هل كانت مفيدة؟

المحلول

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

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

المشكلة في استخدام الحدود المستندة إلى IP/ملفات تعريف الارتباط هي أنه يمكن تجاوز كليهما.استخدام طريقة رمزية تحتوي على ملح جيد وقوي من حيث التشفير (قل شيئًا مثل إحدى "كلمات المرور المثالية" لستيف جيبسون) https://www.grc.com/passwords.htm ) سيستغرق الأمر وقتًا طويلاً (على نطاق عقود) قبل أن يتم التنبؤ بهذه الطريقة بشكل موثوق وضمان قدر معين من الأمان.

نصائح أخرى

يمكنك تحديد عدد الطلبات ربما بطلبين لكل 10 ثوانٍ أو نحو ذلك (قد يقوم المستخدم الحقيقي بإدخال اسم مأخوذ وتعديله قليلاً والمحاولة مرة أخرى).يشبه إلى حد ما كيف لا يسمح لك SO بالتعليق أكثر من مرة كل 30 ثانية.

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

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

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

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

اعتمد على الإجابة المقدمة من UnkwnTech، وهي نصيحة قوية جدًا.

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top