PracticU

הגנה מהתקפת SQL injection

בלי כתוביותעם כתוביות
PracticU › קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט › הגנה מהתקפת SQL injection
מילון מושגים:
SQL Injection - חולשה שבה קלט זדוני מוחדר לשאילתת SQL, ומאפשר לתוקף לקרוא או לשנות נתונים במסד.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
.NET - פלטפורמת פיתוח של מיקרוסופט להרצת יישומים בשפות כמו C#, הכוללת ספריות וסביבת ריצה משותפות.
Entity Framework - ספריית מיקרוסופט שממפה בין אובייקטים בקוד לבין טבלאות במסד נתונים, ומאפשרת לעבוד עם הנתונים בלי לכתוב SQL ישיר.
פריימוורק - מסגרת תוכנה שמספקת מבנה וכלים מוכנים לפיתוח יישומים, כדי לחסוך כתיבת קוד חוזר.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.

הגנה מהתקפת SQL injection
ההרצאה מסבירה איך מגנים על שאילתות SQL באפליקציית .NET עם Entity Framework, ולמה בניית מחרוזת מטקסט שהמשתמש הזין פתוחה להזרקת SQL.
הבעיה
1. חיבור מחרוזות: כשהשאילתה נבנית מטקסט שהמשתמש הקליד, התוקף יכול לשלוח תו מיוחד כמו גרש ולשנות את משמעות השאילתה.
2. הגנה ידנית: הכפלה ידנית של גרשיים אינה דרך אמינה, כי קל לשכוח אותה בשאילתה אחרת.
הפתרון במסגרת Entity Framework
1. פרמטר נפרד: שולחים את הקלט כפרמטר ולא כחלק מהמחרוזת, כך שמסד הנתונים מתייחס אליו כטקסט בלבד.
2. FromSql עם מחרוזת מעוצבת: השיטה המומלצת כיום. היא מקבלת מחרוזת עם משתנים בתוך מחרוזת מעוצבת (interpolated) ודואגת לתווים המיוחדים בעצמה.
3. FromSqlRaw: שיטה שמקבלת שאילתה עם מיקומי פרמטרים, כמו 0 ו-1. ההרצאה מציינת שהיא פחות נפוצה, ומשתמשים בה רק כשיש סיבה מיוחדת.
בדיקה
ההרצאה מריצה חיפוש רגיל ואחריו חיפוש עם מחרוזת תוקפנית שאמורה למחוק טבלה. בגרסה המוגנת המחרוזת מתפרשת כטקסט רגיל, והטבלה נשארת במקומה.
בסיכום, פרמטרים נפרדים מונעים את הבעיה במקור, ולכן זו הדרך הנכונה לכתוב שאילתות עם קלט משתמש.
השיעור הבא בקורס: יצירת Stored Procedure שאינה מתאימה למחלקת Model

פרקי ההרצאה: הגנה מהתקפת SQL injection

  1. 00:00

    הבעיה בעטיפת קלט בגרשיים

  2. 00:57

    שליחת הטקסט כפרמטר

  3. 01:31

    אסקייפ אוטומטי של גרשיים

  4. 02:27

    בדיקת השאילתה המוגנת

  5. 03:26

    הטבלה נותרה שלמה

  6. 04:01

    ההבדל בין FromSqlRaw ל-FromSql

תמלול ההרצאה: הגנה מהתקפת SQL injection

הטקסט המלא של הדקות הראשונות בהרצאה «הגנה מהתקפת SQL injection» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אז איך אנחנו מתמודדים עם התקפת SQL Injection? אז הבעיה שאנחנו רואים זה שעטפנו פה בגרש גרש את הטקסט שלנו, ואז היוזר יכל להכניס גרש פנימי כזה, כאשר יש טכניקה יותר נכונה לעשות, האמת הרבה יותר נכונה, כי היא מונעת SQL Injection.

  2. 00:23

    אנחנו משכפלים את הקוד הזה. הטכניקה הראשונה לא מגנה מפני SQL Injection, submitted to SQL injection attacks והטכניקה הזאת שאנחנו רואים כאן זה בעצם proof against SQL injection attacks והטכניקה הזאת אומרת כזה דבר אל תשלחו ל-SQL raw את הטקסט בצורה כזאת אלא תורידו את הגרש גרש מפה ואת

  3. 00:56

    הטקסט אז אין לי צורך בדולר ופשוט שימו פה את הסוגריים המסוסלים עם המספר 0 ואת הטקסט תשלחו כפרמטר מספר 2. אם היה לי עוד פרמטר שהייתי רוצה לשלוח אז הייתי רושם פה מספר 1 ואז פה פסיק ושולח את הפרמטר הנוסף הם נכנסים בהתאמה כאשר זה קורה אז פונקציית from sql raw מה שהיא עושה לוקחת את הפרמטרים שאנחנו שולחים והיא

  4. 00:58

    בעצמה עוטפת אותם בגרש גרש ושולחת אותם לכאן ואת זה שולחת לכאן אבל מה זה משנה אם היא עוטפת או אנחנו עוטפים כי מה שהיא עושה זה מחפשת בתוך הטקסט שלנו כי שלחנו אותו כפרמטר ולא כחלק ממחרוזת אחת גדולה מחפשת האם בתוך הטקסט קיים גרש וראינו שכן קיים גרש מה שהיא עושה היא פשוט עושה לו אסקייפט קראקטר כזה מעין משהו כזה, או מוסיפה לו עוד גרש אחד.

  5. 01:55

    אם הדאטאבייס מקבל גרש גרש אז הוא יודע שהגרש גרש זה תו רגיל כמו התו a, b ו-c ולא גרש ששייך לשאילתת ה-sql.

  6. 02:09

    אפשר לעשות אסקייפט קרקטר, אפשר לשכפל כל גרש כפעמיים, זה מה שהמערכת עושה. לנו יש ארגומנט אחד.

  7. 02:18

    בואו נראה עכשיו איך המערכת עובדת מה שעשיתי מקודם זה שחזרתי את הטבלה הנה customers יש לנו טבלת customers בואו נרפרש נראה שהיא קיימת לנו ומה שאנחנו רוצים לעשות זה להריץ את אותה השאילתה בדיוק זאת השאילתה שהייתה את אותו הטקסט לחיפוש האמת שנחפש קודם טקסט רגיל ואז נחפש טקסט בעייתי בואו נחזור לפה נריץ את זה.

  8. 02:48

    נגדיר שאנחנו רוצים לחפש fidget קודם כל ואנחנו רואים שהמערכת מצאה שניים אין שום בעיה אין כאן sql injection או ניסיון לביצוע sql injection נריץ שוב פעם ונדביק את הטקסט שהוא זה שגרם לsql injection ולמחיקה של טבלת הcustomers ומה שהוא אומר לי כרגע זה תקשיב אין לך מתנות כאלה זה לא שהוא חיפש a כמו שמקודם הוא אומר לי זה מה שחיפשתי

  9. 03:18

    חיפשתי את כל הטקסט הזה כטקסט רגיל של מתנה. פקודה הזאת שעשינו גרמה לגרש הזאת להיות מה שנקרא אסקייפט קרקטר או פעמיים גרש שניהם אותו הדבר ואז הדאטאבייס אומר אה אתם בעצם רוצים לשלוח לי a כתב וגרש כתב יכול להיות מתנה שיש לה גרש בשם שלה זה ממש בסדר אם אנחנו חוזרים לדאטאבייס ומרפרשים את כל הטבלאות עדיין customers נמצאת פה לא נמחקה כמובן שכרגע קסטומר ריקה, אף פעם לא הכנסנו אליה

  10. 03:49

    מידע, אבל הגענו בפני sql injection. זאת שיטה ראשונה. בגלל שמתכנתים יכולים בטעות לשכוח את הטכניקה הזאת ולהשתמש בטכניקה הזאת והם חשופים לsql injection, ב-NTT framework יצרו לנו עוד פונקציה.

  11. 04:10

    בואו נוריד את זאת לגמרי ונישאר עכשיו עם פונקציה שאומרת From sql שימו לב זאת פונקציה אחרת ויש לנו האמת עוד אחת שנקראת From sql interpolated והשאלה מה ההבדל בין שלושת החבר'ה האלה יש לנו From sql raw יש לנו From sql ו From sql interpolated אז From sql raw המטרה שלה זה היכולת להריץ שאילתות

  12. 04:16

    בדיוק כמו שהייתם מריצים אותם אם הייתם נמצאים בתוך sql בתוך דאטאבייס. sql server וכותבים פה את השאילתה אז אומרים לכם אנחנו נעביר בדיוק את השאילתה שרשמתם אנחנו נעביר אותה ואז יש לכם פה סכנה שאתם לא כתבתם אותה נכון ואתם חשופים להתקפת sql injection from sql אומרת לנו כזה דבר תראו אני לא רוצה להיות raw sql כלומר sql גולמי לכן אתם חייבים להביא

לקורס המלא: קורס Entity Framework Core

ההרצאה הקודמת: התקפת SQL injection

ההרצאה הבאה: יצירת Stored Procedure - שאינה מתאימה למחלקת Model

הרצאות קשורות מקורסים אחרים

  • הגנה מהתקפות SQL Injection
  • פריצה לאתר אינטרנט - SQL injection - חלק 1
  • הסבר על Dependency Injection
  • הזרקה Process Injection - חלק 1

קורסים נוספים במסלול

  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס ASP.NET
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio