SQL injection · حقن SQL
When input becomes a command
- Many apps build a database query by gluing the user's input into a string. That is dangerous.
- If an attacker types SQL as their input, it can become part of the query. This is SQL injection — the most famous web attack.
عندما يتحول الإدخال إلى أمر
- تبني العديد من التطبيقات استعلام قاعدة بيانات عن طريق دمج إدخال المستخدم في نص. هذا خطر.
- إذا كتب مهاجم SQL كمدخل له، يمكن أن يصبح جزءاً من الاستعلام. هذا هو حقن SQL — أشهر هجوم على الويب.
See the attack
- Imagine a login that checks
... WHERE name = '<whatever you typed>'. - An attacker types
' OR '1'='1as the name. The query becomes:
'1'='1'is always true, so the database returns every user. The login is bypassed. Run it and see.
شاهد الهجوم
- تخيل تسجيل دخول يفحص
... WHERE name = '<whatever you typed>'. - يقوم المهاجم بكتابة
' OR '1'='1كاسم. تصبح الاستعلام:
SELECT * FROM users WHERE name = '' OR '1'='1';
'1'='1'دائمًا صحيحة، لذا تعيد قاعدة البيانات كل المستخدمين. تم تجاوز تسجيل الدخول. جربه لترى ذلك.
The fix: parameterised queries
- Never glue user input into SQL. Use parameterised queries (also called prepared statements).
- The database treats the input strictly as a value, never as code — so
' OR '1'='1is just a (failed) name to look up. - Also apply least privilege: the web app's database account should only do what it needs.
الحل: استعلامات معلمة
- لا تقم أبداً بدمج مدخلات المستخدم في SQL. استخدم استعلامات معلمة (تُعرف أيضًا بـ التعليمات المحضرة).
- تعامل قاعدة البيانات المدخلات بصرامة كـقيمة، وليس ككود — لذا فإن
' OR '1'='1مجرد اسم (فاشل) للبحث عنه. - طبق أيضًا مبدأ أقل امتياز: يجب أن يكون حساب قاعدة بيانات التطبيق الويب قادرًا فقط على ما يحتاجه.
Your turn
- Below, write a precise, safe query that returns only bob by his
id. That is the spirit of a parameterised lookup.
Covers: A-Level data security; web application security.
دورك الآن
- بالأسفل، اكتب استعلامًا دقيقًا وآمنًا يعيد bob فقط عبر
idالخاص به. هذا هو جوهر البحث المعلم.
يتناول: أمن البيانات في A-Level؛ أمن تطبيقات الويب.
Common mistakes
- Never build a query by joining raw user input into the text.
- Use parameterised queries so input can never change the query.
أخطاء شائعة
- لا تبني استعلامًا عن طريق دمج مدخلات المستخدم الخام في النص.
- استخدم استعلامات معلمة بحيث لا يمكن للمدخلات تغيير الاستعلام أبدًا.
First, run the attack and see the damage. The app glued the attacker's input into the query, so the condition became name = '' OR '1'='1'. Complete the query exactly like that and see every user leak out. · أولاً، نفذ الهجوم وشاهد الضرر. طبق التطبيق إدخال المهاجم في الاستعلام، لذا أصبح الشرط name = '' OR '1'='1'. أكمل الاستعلام تمامًا هكذا لترى تسرب كل المستخدمين.
Click Run to see the output here. · اضغط تشغيل لرؤية المخرجات هنا.
A safe lookup uses a precise condition. Change the query to return only bob's row, by adding WHERE id = 2. · استعلام آمن يستخدم شرطًا دقيقًا. غيّر الاستعلام لإرجاع صف bob فقط، بإضافة WHERE id = 2.
Click Run to see the output here. · اضغط تشغيل لرؤية المخرجات هنا.