New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
הזרקת SQL - ויקיפדיה

הזרקת SQL

מתוך ויקיפדיה, האנציקלופדיה החופשית

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

תוכן עניינים

[עריכה] היכן קיימת הפרצה?

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

[עריכה] דוגמה לפרצה

בדוגמה הבאה, הנתונה ב־ASP, ביקש המתכנת לקלוט מהמשתמש את סיסמת הגישה שלו לאתר אינטרנט מאובטח, לבדוק את תקינותה כנגד מסד הנתונים ולאשר את הגישה אם הסיסמה אכן קיימת. הקוד (הפגיע לפריצה) הבונה את שאילתת ה-SQL נראה כך:

SQL = "SELECT * FROM users WHERE password='" & Request("password") & "'"


כאשר האובייקט Request משמש לקבלת נתונים מטפסים. כעת, השימוש התקין שראה המתכנת לנגד עינו הוא הכנסת סיסמה, למשל 1234, שתייצר את שאילתת ה-SQL הבאה:

SQL = "SELECT * FROM users WHERE password='1234'"

ובהנחה שאין בטבלת users רשומה שבה העמודה password מכילה את הערך '1234', לא נוכל לקבל גישה.

אך על ידי הזרקת SQL יכול משתמש זדוני להכניס את הקלט הבא:

' OR 'a'='a

שייצר את שאילתת ה-SQL הבאה:

SQL = "SELECT * FROM users WHERE password='' OR 'a'='a'"

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

[עריכה] פתרון

על מנת להיות בטוחים שקוד לא יהיה חשוף להזרקה, אפשר לנקוט באחת משתי הגישות הבאות (ורצוי בשתיהן):

[עריכה] בדיקת תקינות הקלט

על המתכנת לבדוק את כל הנתונים המגיעים מן המשתמש:

  • בשדות טקסט יש לבדוק שהערכים בשדות לא מכילים תווים מיוחדים מסוימים - בדוגמה למעלה מדבור בגרש (') - ואם כן יש להחליף אותו בשני גרשים (''), שכן SQL מפרשת שני גרשים בתוך טקסט כגרש יחיד.
    לחילופין ניתן להשתמש בשגרות של שפת התכנות של מסד הנתונים, כך שניסיון להחדיר את הטקסט יגרום לשגיאה של המערכת במקום לחדירה. אך בשפה העברית עדיף לבצע החלפה (אם מדובר בשדה שאמור לקלוט מילים), שכן התו גרש נמצא בשימוש יומיומי (בגלל מילים מגוירות מלעז, לדוגמה: ג'ירפה, ג'יפ, ז'רגון וכו').
  • נתונים מספריים יש לבדוק כדי לאשר שהם מקבלים ערך מספרי בלבד.
  • גם נתונים שנשמר על עוגייה ניתן לערוך בצד המשתמש ותיתכן פרצת אבטחה גם כאן אם לא ייבדקו.
  • התו ";" משמש בבסיסי נתונים מסוימים לשרשור של שאילתות שונות כדי לבצען ביחד. מסיבה זו יש לנהוג בו משנה זהירות ולחפש את מופעיו בקלט.

[עריכה] שימוש במבנה קשיח יותר של שאילתא

שפות התכנות השונות מציעות פתרון עדיף לבעיה, על ידי כך שהמתכנת יכול להכין שאילתא מובנית ולשים "שומרי מקום" (placeholder) במקומות שאליהן יוכנס אחר כך הנתון הנקלט מהמשתמש. לדוגמה את קטע הקוד הבא, הנתון בשפה JAVA:

Connection con = (acquire Connection)
Statement stmt = con.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * FROM users WHERE name = '" + userName + "';");

יש להחליף בקטע הקוד השקול הזה:

Connection con = (acquire Connection)
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM users WHERE name = ?");
pstmt.setString(1, userName);
ResultSet rset = pstmt.executeQuery();

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

[עריכה] ראו גם

[עריכה] קישורים חיצוניים

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu