תכנות Back-end
הוצג| 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, הטקסט עשוי לשנות את התנאי במקום להישאר שם. - Route (מסלול) מתווך שיטת בקשה ומרחב עבודה לייעודן שלו. שמרו על חוזק המסלול ברור לפני ביצוע החיפוש.
בדקו צורה ורשות
- Validate input (אישור קלט) פירושו בדיקת ערכים נדרשים, סוגים, אורכים מותרים וטווחים. בדקו את הרשות של הקורא בנפרד.
- Status (מצב) מתאר את התוצאה: 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
תפוס מקום קושר ערכים. בחר מזהים דינמיים מרשימת היתרה קבועה בצד השרת.
הפעל דוגמה מקומית מלאה
- שמור והפעל דוגמה זו ב-Python באמצעות 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
קישור כתובות והזרקת ערכים; הוא אינו ממסמך את הקורא.