הזרקת קוד – הבדלי גרסאות

מתוך ויקיפדיה, האנציקלופדיה החופשית
תוכן שנמחק תוכן שנוסף
אפשרות הצעות קישורים: נוספו 3 קישורים.
הוספה של אפשרות למניעת פגיעויות של הזרקת קוד
שורה 6: שורה 6:
המידע שמספק המשתמש משמש<ref>משתמש יכול להיות משתמש אנושי או מחשב.</ref>, לעיתים קרובות, כקלט עבור תוכנה שנכתבה ב[[שפה מפורשת]]. הקוד שמבצע המפרש (interperter) הוא שילוב של פקודות שנכתבו מראש על ידי מפתח התוכנה ומידע שמסופק על ידי המשתמשים. התוקף, באמצעות תכנון קפדני, שותל בקלט מידע שיש לו משמעות בשפת התכנות. כתוצאה מכך המידע מפורש כהוראות בשפת התכנות, ופקודותיו של התוקף מבוצעות כאילו נכתבו על ידי מפתח התוכנה המקורי{{הערה|{{צ-ספר|מחבר=Dafydd Stuttard, Marcus Pinto|שם=The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws|מקום הוצאה=|מו"ל=Wiley|שנת הוצאה=|מהדורה=שנייה}}}}.
המידע שמספק המשתמש משמש<ref>משתמש יכול להיות משתמש אנושי או מחשב.</ref>, לעיתים קרובות, כקלט עבור תוכנה שנכתבה ב[[שפה מפורשת]]. הקוד שמבצע המפרש (interperter) הוא שילוב של פקודות שנכתבו מראש על ידי מפתח התוכנה ומידע שמסופק על ידי המשתמשים. התוקף, באמצעות תכנון קפדני, שותל בקלט מידע שיש לו משמעות בשפת התכנות. כתוצאה מכך המידע מפורש כהוראות בשפת התכנות, ופקודותיו של התוקף מבוצעות כאילו נכתבו על ידי מפתח התוכנה המקורי{{הערה|{{צ-ספר|מחבר=Dafydd Stuttard, Marcus Pinto|שם=The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws|מקום הוצאה=|מו"ל=Wiley|שנת הוצאה=|מהדורה=שנייה}}}}.
דרך הפעולה משתנה בין התקיפות השונות. בתקיפת SQL injection השימוש הוא בשפת SQL על מנת למצוא פירצות בשליפה אשר נשלחת אל מסד הנתונים. בצורה כזו ניתן לבצע שליפה ממסד הנתונים על פי רצון התוקף ו"לדרוס" את השאילתא שהייתה אמורה להתבצע.
דרך הפעולה משתנה בין התקיפות השונות. בתקיפת SQL injection השימוש הוא בשפת SQL על מנת למצוא פירצות בשליפה אשר נשלחת אל מסד הנתונים. בצורה כזו ניתן לבצע שליפה ממסד הנתונים על פי רצון התוקף ו"לדרוס" את השאילתא שהייתה אמורה להתבצע.

== מניעת הזרקת קוד ==
כדי למנוע בעיות של הזרקת קוד, יש להשתמש בשיטות לטיפול מאובטח בקלט ופלט, כגון:

* שימוש בממשקי API שאם משתמשים בהם כראוי, מאובטחים מפני כל תווי הקלט. שאילתות עם פרמטרים (המוכרות גם בשם "שאילתות מלוכדות", "הצהרות מוכנות", "משתנים קשורים") מאפשרות לפרש את נתוני המשתמש מחוץ למחרוזת. בנוסף Criteria API<ref>{{צ-ספר|שם=Java Persistence API|קישור=http://dx.doi.org/10.1007/978-1-4302-4627-5_4|מו"ל=Apress|שנת הוצאה=2013|מקום הוצאה=Berkeley, CA|ISBN=978-1-4302-4626-8|עמ=103–124|מחבר=Antonio Goncalves}}</ref> וממשקי API דומים מתרחקים מהמושג של מחרוזות פקודה שיש ליצור ולפרש.
* עם SQL הזרקת, אפשר להשתמש בשאילתות עם פרמטרים, [[פרוצדורה מאוחסנת]], אימות קלט ברשימה הלבנה ועוד כדי לעזור להפחית פגיעות על ידי הזרקת קוד.<ref>{{צ-ספר|שם=SQL Style Guide Cheat Sheet|קישור=http://dx.doi.org/10.1007/978-1-4842-8867-2_22|מו"ל=Apress|שנת הוצאה=2022-12-27|מקום הוצאה=Berkeley, CA|ISBN=978-1-4842-8866-5|עמ=605–606|מחבר=Jon Heller}}</ref>
* ניתוק מעטפת מודולרית מהקרנל.
* אכיפת הפרדת שפה באמצעות [[מערכת טיפוסים]].<ref>{{צ-מאמר|מחבר=Tom McDonough|שם=Guy Debord, or The Revolutionary Without a Halo|כתב עת=October|כרך=115|שנת הוצאה=2006-01|עמ=39–45|doi=10.1162/octo.2006.115.1.39|קישור=http://dx.doi.org/10.1162/octo.2006.115.1.39}}</ref>


== הערות שוליים ==
== הערות שוליים ==

גרסה מ־22:44, 31 במאי 2023

הזרקת קודאנגלית: Code Injection) היא טכניקת האקינג המנצלת חולשת אבטחה בתוכנה המאפשרת את שינוי מהלך הביצוע שלה. הדבר נעשה באמצעות העברת קלט לא צפוי, המכיל פקודות זדוניות, שמבוצעות כחלק מביצוע התכנית. טכניקות נפוצות של הזרקת קוד כוללות הזרקת SQL למסדי נתונים ו-XSS לאתרי אינטרנט. הזרקת קוד נובעת לרוב מכך שהתוכנית אינה מבצעת בדיקת תקינות של קלטים המועברים אליה.

התקפות הזרקת קוד נפוצות מאוד במערכות המתוכנתות בשפה מפורשת (שפת interperter) או שפת תסריט (script) כגון PHP ,SQL ,Perl שנפוצות מאוד בפיתוח ישומי web. עם זאת ניתן לבצע התקפות הזרקת קוד גם במערכות המבוססות שפות תכנות מהודרות כגון התקפת גלישת חוצץ (Buffer Overflow attack).

אופן הביצוע

המידע שמספק המשתמש משמש[1], לעיתים קרובות, כקלט עבור תוכנה שנכתבה בשפה מפורשת. הקוד שמבצע המפרש (interperter) הוא שילוב של פקודות שנכתבו מראש על ידי מפתח התוכנה ומידע שמסופק על ידי המשתמשים. התוקף, באמצעות תכנון קפדני, שותל בקלט מידע שיש לו משמעות בשפת התכנות. כתוצאה מכך המידע מפורש כהוראות בשפת התכנות, ופקודותיו של התוקף מבוצעות כאילו נכתבו על ידי מפתח התוכנה המקורי[2]. דרך הפעולה משתנה בין התקיפות השונות. בתקיפת SQL injection השימוש הוא בשפת SQL על מנת למצוא פירצות בשליפה אשר נשלחת אל מסד הנתונים. בצורה כזו ניתן לבצע שליפה ממסד הנתונים על פי רצון התוקף ו"לדרוס" את השאילתא שהייתה אמורה להתבצע.

מניעת הזרקת קוד

כדי למנוע בעיות של הזרקת קוד, יש להשתמש בשיטות לטיפול מאובטח בקלט ופלט, כגון:

  • שימוש בממשקי API שאם משתמשים בהם כראוי, מאובטחים מפני כל תווי הקלט. שאילתות עם פרמטרים (המוכרות גם בשם "שאילתות מלוכדות", "הצהרות מוכנות", "משתנים קשורים") מאפשרות לפרש את נתוני המשתמש מחוץ למחרוזת. בנוסף Criteria API[3] וממשקי API דומים מתרחקים מהמושג של מחרוזות פקודה שיש ליצור ולפרש.
  • עם SQL הזרקת, אפשר להשתמש בשאילתות עם פרמטרים, פרוצדורה מאוחסנת, אימות קלט ברשימה הלבנה ועוד כדי לעזור להפחית פגיעות על ידי הזרקת קוד.[4]
  • ניתוק מעטפת מודולרית מהקרנל.
  • אכיפת הפרדת שפה באמצעות מערכת טיפוסים.[5]

הערות שוליים

  1. ^ משתמש יכול להיות משתמש אנושי או מחשב.
  2. ^ Dafydd Stuttard, Marcus Pinto, The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws, שנייה, Wiley
  3. ^ Antonio Goncalves, Java Persistence API, Berkeley, CA: Apress, 2013, עמ' 103–124, ISBN 978-1-4302-4626-8
  4. ^ Jon Heller, SQL Style Guide Cheat Sheet, Berkeley, CA: Apress, 2022-12-27, עמ' 605–606, ISBN 978-1-4842-8866-5
  5. ^ Tom McDonough, Guy Debord, or The Revolutionary Without a Halo, October 115, 2006-01, עמ' 39–45 doi: 10.1162/octo.2006.115.1.39
ערך זה הוא קצרמר בנושא מחשבים. אתם מוזמנים לתרום לוויקיפדיה ולהרחיב אותו.