it-swarm.asia

كيف يمكنني منع مستخدم قوي من استدعاء وظائف ajax الخاصة بي؟

لدي موقع يستخدم مكالمات ajax لأداء عدد من الوظائف. لديهم استدعاء webbrowser مرة أخرى إلى برنامج نصي - ajax.php. على الرغم من أنني أستخدم بيانات النشر لنقل البيانات وتقييد الأوامر التي يمكن أن يتصل بها البرنامج النصي ajax ، فلا يوجد ما يمنع المستخدمين حقًا من خداع استدعاءات ajax لمحاولة معالجة الموقع. هل هناك طريقة شاملة لمنع المستخدمين من خداع المكالمات؟ هل هناك طريقة للتأكد من أن مكالمة ajax تأتي في الواقع من موقعي وليس من نص أو موقع آخر؟

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

12
Daniel Bingham

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

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

12
delete

باختصار ، لا. يمكن تقديم أي طلب يتم تقديمه لعنوان URL من خلال GET أو POST بواسطة أي شخص يستخدم أي برنامج. في الواقع ، لا يختلف طلب AJAX حقًا عن تحميل عنوان URL مباشرةً ، باستثناء ما يتم عرض البيانات التي تم إرجاعها في المستعرض مثل صفحة الويب.

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

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

ربما يكون الحل الأفضل هو تقديم بعض أشكال المصادقة.

6
DisgruntledGoat

إذن فأنت تريد تحديد قصر ajax.php على الاستجابة فقط لطلبات AJAX؟

لست خبيرًا في php ، لكن يبدو أنه من الممكن تحديد ما إذا كان هناك طلب مقدم من AJAX أو طلب متصفح "منتظم" عن طريق التحقق من قيمة $_SERVER['HTTP_X_REQUESTED_WITH'].

المصدر

3
theycallmemorty

كما أشار شخص آخر ... مكالمات ajax هي مجرد مستقبلات $ _GET أو $ _POST ، لذلك كان مقاربي دائمًا هو معاملتهم كما أفعل أي صفحة إجراء وتصفية/تطهير الإدخال. إذا كان لديك اختلاف بسيط عما تتوقعه لمدة شهر على سبيل المثال ، وكنت تعلم أنه دائمًا بتنسيق "يناير ، فبراير ، مارس ..." ، فيمكنك تعيين مجموعة من القيم المتوقعة وتصفية ضدها. اعتراض على أي شيء لا يتطابق مع الأمر ، ثم اختر شيئًا مثل "Bzzt ... شكرًا على اللعب ..."

لا يمكنني التفكير في مثال يحتاج فيه برنامج نصي Ajax إلى أن يكون أكثر أمانًا من تقديم النموذج.

HTH

1
digit1001

أعتقد أن جزءًا كبيرًا من الحل الخاص بك سيكون الحد من معدل حركة المرور من بصمة مستخدم معين. ربما تجزئة عنوان IP وسلسلة وكيل المستخدم والبيانات التي يتم إرسالها.

أيضا ، يمكن ربط الصفحة التي تستدعي ajax إلى ajax إرجاع البيانات أقرب إلى مساعدة. لذا ، على الصفحة المعنية ، عند تحميل الصفحة ، أرسل مفتاحًا للجلسة مناسبًا لجلسات X ، لكل طلب من أجاكس ، سيحتاج JavaScript إلى تمرير هذا المفتاح مرة أخرى وإلا سيعود ajax بالفشل. بمجرد أن تصل صفحتك إلى X+1 ajax calls ، أجبر المستخدم على القيام ببعض الإجراءات (ربما captcha؟ ربما حتى شيء مثل mousemove أو tap اعتمادًا على UA) قبل إرسال جلسة جديدة المفتاح لأسفل السلك (خارج النطاق من ajax الأصلي) ثم أعد تشغيل العملية.

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

0
artlung