SQL injection vulnerability allowing login bypass 💉
ثغرة حقن SQL التي تسمح بتجاوز عملية تسجيل الدخول (Login Bypass) هي نوع من الثغرات الأمنية التي تمكن المهاجم من الدخول إلى نظام ما دون الحاجة إلى تقديم بيانات اعتماد صحيحة (مثل اسم المستخدم وكلمة المرور)، تحدث هذه الثغرة عندما يتم بناء استعلام SQL الخاص بتسجيل الدخول باستخدام مدخلات المستخدم دون التحقق منها أو تنظيفها بشكل صحيح.
📍 كيف تحدث هذه الثغرة؟
عادةً ما يتم التحقق من صحة بيانات تسجيل الدخول باستخدام استعلام SQL مثل التالي:
SELECT * FROM users WHERE username = 'admin' AND password = 'password123';
📌 في هذا الاستعلام، يتم التحقق من وجود مستخدم باسم `admin` وكلمة مرور `password123`. إذا تم العثور على تطابق، يتم منح المستخدم حق الوصول.
📌 إذا كان التطبيق لا يقوم بتنظيف مدخلات المستخدم بشكل صحيح، يمكن للمهاجم إدخال بيانات خاصة في حقول اسم المستخدم أو كلمة المرور لتعديل الاستعلام.
🔥 مثال على الهجوم:
1️⃣ لنفترض أن المهاجم أدخل القيم التالية:
- **اسم المستخدم:** `admin'--`
- **كلمة المرور:** أي قيمة (مثل `123`)
2️⃣ سيصبح الاستعلام النهائي كالتالي:
SELECT * FROM users WHERE username = 'admin'--' AND password = '123';
3️⃣ في هذا الاستعلام:
- `'` تغلق القيمة الأصلية لاسم المستخدم.
- `--` يبدأ تعليق في SQL، مما يعني أن الجزء المتبقي من الاستعلام (`AND password = '123'`) يتم تجاهله.
4️⃣ نتيجة لذلك، يتم تنفيذ الاستعلام التالي:
SELECT * FROM users WHERE username = 'admin';
إذا كان هناك مستخدم باسم `admin`، سيتم إرجاع بيانات هذا المستخدم، وسيتم منح المهاجم حق الوصول دون الحاجة إلى كلمة المرور الصحيحة.
💥 كيفية الحماية:
1.استخدام الاستعلامات المحددة (Prepared Statements):استخدام الاستعلامات المحددة مع معاملات مرتبطة (parameterized queries) يمنع حقن SQL لأن المدخلات يتم التعامل معها كقيم وليس كجزء من الاستعلام.
2.التحقق من المدخلات: تأكد من أن جميع المدخلات التي تأتي من المستخدم يتم التحقق منها وتنظيفها قبل استخدامها في الاستعلامات.
3.التشفير كلمات المرور: قم بتخزين كلمات المرور بشكل مشفر (مثل استخدام خوارزميات التجزئة مثل bcrypt) ولا تقارن كلمات المرور مباشرة في الاستعلامات.
4.استخدم ORM: استخدام أدوات Object-Relational Mapping (ORM) يمكن أن يساعد في تجنب كتابة استعلامات SQL مباشرة، مما يقلل من خطر الثغرات.