برمجة الطرف الخلفي
مُقدَّم| English | المعنى |
|---|---|
| route/ruːt/ | توجيه |
| validate input/ˈvælɪdeɪt ˈɪnpʊt/ | التحقق من صحة الإدخال |
| status/ˈsteɪtəs/ | رمز الحالة |
| SQL injection/ˌes kjuː ˈel ɪnˈdʒekʃn/ | حقن SQL |
| parameterised query/ˌpærəˈmetəraɪzd ˈkwɪərɪ/ | استعلام مُعَمَّم |
يتغير استعلام البحث مع سلسلة البحث
- يستقبل بحث الاسم
' OR 1=1 --. إذا ألصق الكود هذا النص في SQL، فقد يغير الشرط بدلاً من البقاء كاسم. - المسار يربط طريقة الطلب والمسار بالمعالج الخاص به. حافظ على عقد المسار واضحاً قبل تنفيذ عملية البحث.
تحقق من الشكل والأذون
- تحقق من صحة الإدخال يعني التحقق من القيم المطلوبة، والأنواع، والأطوال المسموحة، والمدى. تحقق من إذن المكالمة بشكل منفصل.
- الحالة تصف النتيجة: 200 لهذا البحث الناجح، 400 لإدخال غير صالح، و404 لمصدر مفقود. يحتاج فشل الأذون إلى سياسة التطبيق المتفق عليها؛ ليست أخطاء إدخال تلقائية.
طابق هذه النتائج ضمن عقد المسار الخاص بالدرس.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
هذه المعاني لا تُعرّف بمفردها كيفية تمثيل فشل صلاحيات الوصول الخاصة.
احتفظ بالقيم خارج نص SQL
- حقن SQL يحدث عندما يصبح نص غير موثوق جزءاً من بناء جملة SQL. الاستعلام المعامل يربط قيمة بشكل منفصل عن العبارة.
- تربط العلامات الفراغية القيم، وليس أسماء الجداول أو اتجاهات الترتيب العشوائية. اختر هذه المعرفات من قائمة مسموحة ثابتة على جانب الخادم عندما يتطلب المسار ذلك.
أي طريقة بحث تحافظ على فصل الاسم المُدخل عن جملة SQL؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ربط القيم يحافظ على فصلها عن الجملة الثابتة.
اشرح ما الذي يتغير عند ربط اسم بعلامة مكان في SQL.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
تظل الجملة ثابتة بينما تظل القيمة المربوطة بشكل منفصل بيانات.
يمكن لمكانة القيمة أن تمثل بأمان أي اسم جدول أو اتجاه فرز.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
تربط مكانات القيم. اختر معرفات ديناميكية من قائمة مسموحة ثابتة في الطرف الخادمي.
تشغيل مثال محلي كامل
- احفظ وشغل هذا المثال بايثون باستخدام SQLite. يتم تخزين السلسلة الغريبة كاسم، ثم تُبحث كقيمة مربوطة.
- تحتوي النتيجة فقط على الصف المسمى. يمنع الربط هذه القيمة من أن تصبح بناء جملة SQL؛ ولا يحدد الإذن ويجعل كل تطبيق آمناً.
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT)")
name = "' OR 1=1 --"
con.executemany("INSERT INTO students VALUES (?, ?)", [(1, "Mei"), (2, name)])
rows = con.execute("SELECT id FROM students WHERE name = ?", (name,)).fetchall()
print(rows) # [(2,)]
con.close()
ماذا يطبع المثال الكامل لـ SQLite؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
يتم تخزين السلسلة غير المعتادة ثم مطابقتها كاسم حرفي.
اجعل حالات الفشل مفيدة وخاصة
- قدم للمتصفح رسالة واضحة يمكنه التصرف بها، مثل حقل غير صالح أو فشل مؤقت. لا تعيد أخطاء SQL الخام، أو بيانات اعتماد خاصة، أو مسارات تكدس.
- سجّل التفاصيل التشخيصية فقط في سجلات محمية مع إزالة القيم الحساسة. سجّل ما يكفي من السياق للتحقيق دون نسخ جسم كل طلب خاص.
إرجاع أخطاء قاعدة البيانات الخام للزوار العاديين حتى يتمكنوا من تصحيح أخطاء SQL.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
إرجاع رسائل مفيدة وآمنة؛ وحماية سجلات التشخيص وإزالة القيم الحساسة.
تحقق من أكثر من المسار السعيد
- افحص المدخلات الصالحة، والمفقودة، والخاطئة النوعاً، والكبيرة الحجم؛ والوصول المرفوض؛ والنتيجة الفارغة؛ وفشل قاعدة البيانات المحاكى. حدّد النتيجة المتوقعة لكل حالة.
- احتفظ بكل قيمة ديناميكية مرتبطة، بما في ذلك قيم القوائم المنسدلة. لا يمنع قائمة المتصفح شخصًا من إرسال قيمة مختلفة مباشرة.
افحص الطلب، وأصِل بالمدعوّ، وارتبط بقيم البيانات. هذه العمليات تحل مشاكل مختلفة؛ لا يحل أي منها محل الآخر.
ما هي المدخلات الخارجية التي تتطلب فحوصات مناسبة على الخادم؟ حدد جميع الخيارات المطابقة.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
قد تحتوي القيم الخارجية التي تبدو عادية على أنواع أو أطوال أو صلاحيات خاطئة.
الاستعلام مُعَمَّم، ولكن يمكن لأي مستخدم قراءة صفوف الطلاب الخاصة. ما الذي ينقص؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ربط العناوين هو حقن للقيم؛ ولا يمنح صلاحية للمستخدم.