اذهب إلى المحتوى
  • 0

كيف احمي موقعي من مفتعلي الضغط على السيرفر بتكرار الرسائل وارسائل النماذج

علي الكاسر

السؤال

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكنك تعطيل زر الارسال عند ضغطه لأول واعادة تمكينه عند اكتمال الطلب. سيمكنك بهذا تلافي هاته المشكلة.

مثال:

<button onclick="sendMessage()">send</button>


.. 

<script>
let isSending = false; 
function sendMessage(){
   if(! isSending){
      // يتم الارسال الآن
      isSending = true
     
      // ارسال طلب الاجاكس
      
      // بعد نجاح طلب الاجاكس
      .then(response => {
          isSending = false
      })
   }
}
</script>

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

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

لذا يفضّل اتباع بعض معايير الحماية من طرف خادم الويب، مثل استخدام مايعرف ب Rate Limiter والذي يعمل على حجب الطلبات HTTP القادمة إلى خادم الويب من نفس المستخدم أو عنوان ال IP لمدّة معيّنة من الزمن حسب العدد الأعظمي الذي تحدده أنت، ولها أيضاً العديد من التطبيقات والمزايا التي قد تكون مفيدة في هذه الحالات.

يختلف تطبيقها حسب لغة البرمجة وإطار العمل الذي تستخدمه ولكن يمكنك البحث عن المصطلح ضمن الانترنت تبعاً للغة البرمجة التي تتعامل معها وستجد العديد من الحلول والأمثلة لتطبيقها. ضمن لارافل يوجد قسم خاص ضمن التوثيق الرسمي يدعى Rate Limiting، أما في node.js يوجد العديد من المكتبات منها express-rate-limit لإطار العمل Express.js.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 13 ساعة قال Sam Ahw:

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

لذا يفضّل اتباع بعض معايير الحماية من طرف خادم الويب، مثل استخدام مايعرف ب Rate Limiter والذي يعمل على حجب الطلبات HTTP القادمة إلى خادم الويب من نفس المستخدم أو عنوان ال IP لمدّة معيّنة من الزمن حسب العدد الأعظمي الذي تحدده أنت، ولها أيضاً العديد من التطبيقات والمزايا التي قد تكون مفيدة في هذه الحالات.

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

اخي لقد بحثت كثيرا في قوقل عن Rate Limiter ولكن لم احد مصادر عربيه تتحدث عنه، جربت بعض الاكواد التي وجدتها في مصادر اجنبيه الا انها فاشله وغير مفهومه واغلبها لم تعمل، هل يمكن ان تشرح لي بالاكواد php لافهم الموضوع 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 دقيقة مضت قال علي الكاسر:

اخي لقد بحثت كثيرا في قوقل عن Rate Limiter ولكن لم احد مصادر عربيه تتحدث عنه، جربت بعض الاكواد التي وجدتها في مصادر اجنبيه الا انها فاشله وغير مفهومه واغلبها لم تعمل، هل يمكن ان تشرح لي بالاكواد php لافهم الموضوع 

في لارافل مثلاً يتم تعريفه التحكم بالمسار المراد تحديد عدد الطلبات له بالخطوات التالية:

1- ضمن المسار App\Providers\RouteServiceProvider يتم إضافة الإعدادات ضمن الدالة configureRateLimiting :

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
 
/**
 * Configure the rate limiters for the application.
 */
protected function configureRateLimiting(): void
{
    RateLimiter::for('api', function (Request $request) {
        return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
    });
}

حيث يمكنك التحكّم بالمسارات بشكل عام أو بشكل مخصص لكل مسار،  بزمن الحجب بالثانية، والعامل الذي سيتم من خلاله التأكد من أن المستخدم هو نفسه وهنا تحققنا من id أو عنوان IP

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...