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

السؤال

Recommended Posts

  • 0
نشر

إن Statement هي عبارة SQL التي سوف تنفذ فعليا في قاعدة البيانات، أما PreparedStatement هي عبارة عن الشكل العام للاستعلام بدون الوسطاء/القيم الممررة ضمن الاستعلام حيث تمرر القيم لاحقا بعد التأكد من خلوها من الأكواد البرمجية الخبيثة أي نتجنب حشر أكواد SQL ضمن الاستعلام فنحمي بذلك قاعدة البيانات.

تلك المشكلة تدعى SQL injection أي حقن تعليمات SQL مع البيانات المدخلة للاستعلام تسبب في مشاكل مثل التعديلات ع البيانات أو تسريبها أو حذفها أو إعطاء صلاحيات للمستخدمين بدون تخويل (مثل في حالة أن جدول المستخدمين فيه صلاحيات لهم، فعند عمل تعديل بالدور لأحد الحقول يمكن أن يصبح مستخدم ما له صلاحيات مسؤول)

  • كيف نمنع الحقن، يتم التخلص من بعض المحارف مثل ' بوضع محرف الهروب قبلها \ فتصبح تعامل مثل نص عادي
  • ترسل PreparedStatement لقاعدة البيانات ليتم التهيئة لهذا الاستعلام أي عمل pre compile
  • PreparedStatement تحجز موارد الذاكرة بشكل أكبر بقليل حتى تستقبل المدخلات وينتهي التنفيذ

ما الذي يمكن أن يكتب المهاجم في المثال المرفق لديك؟ لاحظي

SELECT * FROM employee WHERE id = ?

? =>  123 or 1 = 1
      ^^^ أي رقم

في حال تم تمرير أي رقم ليتم الشرط عشوائي ثم تمرير شرط محقق دوماً سيعيد الاستعلام جميع معلومات المستخدمين حيث 1 = 1 محقق دوماً

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...