Zeina Almakdisi نشر 26 ديسمبر 2021 أرسل تقرير نشر 26 ديسمبر 2021 (معدل) ما فائدة PreparedStatement PreparedStatement pstmt = con.prepareStatement("SELECT * FROM employee WHERE id = ?"); Statement pstmt = con.Statement(); تم التعديل في 26 ديسمبر 2021 بواسطة Wael Aljamal توضيح السؤال 1 اقتباس
0 Wael Aljamal نشر 26 ديسمبر 2021 أرسل تقرير نشر 26 ديسمبر 2021 إن Statement هي عبارة SQL التي سوف تنفذ فعليا في قاعدة البيانات، أما PreparedStatement هي عبارة عن الشكل العام للاستعلام بدون الوسطاء/القيم الممررة ضمن الاستعلام حيث تمرر القيم لاحقا بعد التأكد من خلوها من الأكواد البرمجية الخبيثة أي نتجنب حشر أكواد SQL ضمن الاستعلام فنحمي بذلك قاعدة البيانات. تلك المشكلة تدعى SQL injection أي حقن تعليمات SQL مع البيانات المدخلة للاستعلام تسبب في مشاكل مثل التعديلات ع البيانات أو تسريبها أو حذفها أو إعطاء صلاحيات للمستخدمين بدون تخويل (مثل في حالة أن جدول المستخدمين فيه صلاحيات لهم، فعند عمل تعديل بالدور لأحد الحقول يمكن أن يصبح مستخدم ما له صلاحيات مسؤول) كيف نمنع الحقن، يتم التخلص من بعض المحارف مثل ' بوضع محرف الهروب قبلها \ فتصبح تعامل مثل نص عادي ترسل PreparedStatement لقاعدة البيانات ليتم التهيئة لهذا الاستعلام أي عمل pre compile PreparedStatement تحجز موارد الذاكرة بشكل أكبر بقليل حتى تستقبل المدخلات وينتهي التنفيذ ما الذي يمكن أن يكتب المهاجم في المثال المرفق لديك؟ لاحظي SELECT * FROM employee WHERE id = ? ? => 123 or 1 = 1 ^^^ أي رقم في حال تم تمرير أي رقم ليتم الشرط عشوائي ثم تمرير شرط محقق دوماً سيعيد الاستعلام جميع معلومات المستخدمين حيث 1 = 1 محقق دوماً 1 اقتباس
السؤال
Zeina Almakdisi
ما فائدة PreparedStatement
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM employee WHERE id = ?"); Statement pstmt = con.Statement();
توضيح السؤال
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.