كيف احمي endpoint معين بحيث لا يتم الوصول اليه الا بأمر مني !

  • Rashadoo

ما اريده بالضبط هو التالي:

لنتخيل لدي موقع يجلب 10 اسئلة عشوائية للعضو، في كل مرة يقوم العضو بالجواب الصحيح تزيد نقاطه بعدد 1، كل يوم يمكن ان تتكرر بعض الاسئلة، السؤال هو كيف امنع مستخدم عابث من بعث طلب الى نقطة زيادة عدد النقاط (اي الغش)

@wgh @KernelCode

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

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

فتتحقق على السيرفر من كل ما تريد مثل:

  • الاجابة صحيحة

  • لديه صلاحية الاجابة على هذا السؤال (من ضمن ال 10 المخصصة له)

  • لم يقم بلاجابة عليه سابقاً (او على الاقل لا يرسله بشكل متكرر ان كنت ستسمح بالتكرار)

  • ...

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

عند ارسال الجواب مع ال id و API يعتمد oAuth2

مثال :

http://ex.com/api/1.0 [KEY]/user_id/question_id/ احفظ question_id و user_id في جدول منفصل بحيث تستطيع حساب النقاط من هذا الجدول

tab user_question
id
user_id
question_id
...

لمعرفه عدد النقاط للمستخدم

  select count(user_id) where user_id=[VAL] 

الخ

هذا شيء اكيد

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

:O

يا رجل يعني ان تحققت على السرفر لا يكون المستخدم قادر على بعث نفس الاجابة 1000 مرة وزيادة 1000 نقطة ؟

لا ، كان هناك سوء فهم في الأول ،

يمكنك عمل جدول جديد ، يكون إسمه مثلا question_user يتم إضافة record به user_id و question_id حيث يتم إضافة record جديد به ID العضو و IDالسؤال الذي أجاب عليه إجابة صحيحة عند الإجابة ، وقبل إرسال طلب إضافة نقطة تتأكد أن هذا العضو والسؤال ليسا متواجدين ... فإن كانا متواجدين لا يتم إرسال طلب زيادة نقطة

هذا ما قررت فعله في تعليقات سابقة ان لم تلاحظ !

لكن السؤال الاول لي كان ان كنت اريد زيادة اكثر من نقطة لنفس السؤال ان اجاب عليه مرات متكررة، اظن ان هذه الفكرة ليست جيدة الآن، فكرت ان افعلها نقطة واحدة لكل سؤال يومياً مرة واحدة، لكن لا داعي لذلك

-1

قم بإستخدام مفتاح حماية او تحقق

يستخدم دخال الـ form ويكون مخفي هذا شرح لطريقة صنع واحد بإستخدام PHP

يمكنك ايضًا إستخدامة مع الـ GET و POST

يستطيع اي شخص اخذ التوكن من الركوست وارفاقة في مليون ركوست آخر -_-

ﻻ لن يستطيع لان الطلب يخزن في $_SESSION

وعند تنفيذ الطلب عن طريق متصفح اخر او عبر امر curl لن يستطيع


بالإضافة لذلك كل طلب يتغيير فيه مفتاح الامان او التحقق

اولا ليس لدي Session لاني اقوم بعمل API يعتمد oAuth2

ثانياً فكرة وضع مفتاح امان لكل سؤال ولكل شخص امر صعب، فكرت فيه لكن هذا لوحده سيستهلك السرفر كاملاً من انشاء وحذف هذه المفاتيح