كيف يمكنك منع المستخدمين من نشر البيانات عدة مرات على الموقع

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

  •  02-07-2019
  •  | 
  •  

سؤال

أنا أعمل على تطبيق ويب (J2EE) و أود أن أعرف الخيارات المتاحة للتعامل مع وظيفة مزدوجة من المتصفح.

الحلول التي رأيتها و التي استخدمت في الماضي كل جانب العميل:

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

وأود أن تفضل أن تنفذ من جانب الخادم الحل إذا كان ذلك ممكنا.هل هناك أي نهج أفضل من تلك التي ذكرتها أعلاه ، أو من جانب العميل حلول أفضل ؟

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

المحلول

من الصعب تنفيذ الأبله الحل (كما هي دائما تحسين البلهاء). بغض النظر عن ما تفعله ، من جانب العميل يمكن التلاعب بها أو أداء غير صحيح.

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

نصائح أخرى

هل يمكن أن تقدم "التذكرة" كجزء من النموذج رقم عشوائي و تأكد من أنها لا تحصل على قبول مرتين على جانب الملقم.

اثنين من جانب الخادم حلول تتبادر إلى الذهن:

  1. إنشاء مرة واحدة استخدام "الرموز" في شكل خفي المجال.مرة واحدة رمز المستخدمة ، يتم حذفها من أي قاعدة بيانات أو الدورة كائن سياق أنت تخزينها في.في المرة الثانية ، إنها لا تقبل.
  2. ذاكرة التخزين المؤقت المعلومات الواردة ، وإذا متطابقة من الاستمارة الواردة في غضون فترة زمنية معينة (10 دقائق ؟ ساعة ؟ عليك أن تقرر!) هو تجاهلها.

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

نحن نستخدم في وقت حساس ، مرة واحدة التذاكر.انها مثل معرف جلسة من نوع.ولكنها مرتبطة نموذج/صفحة.

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

الدعامات لديه شيء مثل هذا في بني إذا كنت يحدث أن يكون استخدامه.

http://struts.apache.org/1.x/apidocs/org/apache/struts/util/TokenProcessor.html

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

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