كيفية تقييد الوصول إلى تطبيق الويب إلى جهاز واحد فقط؟

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

سؤال

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

واسمحوا لي أن أعرف ما في رأيك سيكون أفضل حل. الواجهة الخلفية الخاصة بي هي php/mysql إذا كان ذلك مهمًا.

تحرير: أحتاج إلى توضيح ... هذا بالإضافة إلى إدارة الجلسة العادية. أحتاج إلى تقييد المستخدمين حتى يتمكنوا من تسجيل الدخول إلى تطبيق الويب من جهاز معين فقط. لذا ، إذا قام المستخدم بتسجيل الدخول في الأصل من جهاز الكمبيوتر الخاص به في العمل وقمت بتخزين IP/Cookie/ETC. ، فإن تسجيلات العميل خارج (أو حتى لا) ، فإن العودة إلى المنزل وتحاول تسجيل الدخول إلى القيام بذلك. أوافق على فكرتها الرهيبة ولكن العميل يصر :)

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

المحلول

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

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

نصائح أخرى

يمكنك الحد من مستخدم واحد عن طريق إصدار العميل مع شهادة SSL من جانب العميل تم إنشاؤها باستخدام عنصر Keygen ، وهذا يحصل على المتصفح لإنشاء زوج مفتاح ، والحفاظ على المفتاح الخاص في وكيل المستخدم ، ثم تتلقى SPKAC ، وهو ما أنت يمكن استخدامه إلى OpenSSL إنشاء شهادة ، ثم ترسلها مرة أخرى إلى وكيل المستخدم ، ويقوم بتثبيتها ويمكن استخدامها لتحديد المستخدم في هذا المتصفح المحدد فقط عبر HTTP+TLS من ذلك الحين.

أي شيء آخر ، ببساطة لن يعمل بنسبة 100 ٪ - على الرغم من أنه يمكنك اختراق الطرق التي يبدو أنها تعمل (حتى يحدث خطأ ما ولا يعمل) :)

لسوء الحظ ، فإن IP غير خاص بالآلة لأسباب متعددة:

  1. يمكن أن يتغير عنوان IP أثناء الجلسة ، مع عدم وجود إشعار (قد لا يكون المستخدم على دراية به)
  2. معظم المستخدمين لديهم IP ديناميكي ، لذلك بالتأكيد سوف يتغير في مرحلة ما
  3. بالنسبة لآلات مثل الكمبيوتر المحمول أو الكمبيوتر اللوحي أو الهاتف الخليوي ، يعتمد عنوان IP على مزود الخدمة الحالي
  4. سيظهر لك جميع المستخدمين الذين يقفون وراء وكيل كـ IP واحد ، لذلك لا يزال بإمكانك اكتشاف ما إذا كانوا ينتقلون من جهاز إلى آخر

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

تم تضمين الحل الأفضل بالفعل في خادم الويب اعتمادًا على ما الذي تستخدمه. هذا ما جلسات من أجل. في ASP.NET/IIS ، عادة ما يكون هناك 20 دقيقة لكل جلسة.

لذلك إذا كان المستخدم يستخدم كمبيوترًا آخر للوصول إلى WebApplication ، فسيقوم مهلة الجلسة بإصدار اتصال من الجهاز الخمول.

تحديث

قد ترغب في التفكير في تقييد المستخدم حسب عنوان MAC لآلاته الفريدة.

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

يمكنك أيضًا التفكير في استخدام بعض المعلومات من $ _server لتقييد المستخدمين على مشمع لمتصفح ويب واحد (http_user_agent) ومنفذ واحد (Remote_port) - كطريقة إضافية للتمييز بين الآلات.

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

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

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