נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
אבטחת מידע
RSS UnderWarrior Forums : RSS אבטחת מידע
נושא

נושא: Sql Injection Prevention

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
שמוליק
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 02 December 2006
משתמש: מנותק/ת
הודעות: 3
נשלח בתאריך: 02 December 2006 בשעה 14:20 | IP רשוּם
ציטוט שמוליק

Sql Injection Prevention

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

אני רוצה לכתוב פונקציה שתטפל בנושא.

קראתי את המאמר של notkok וניר אדר בנושא.

השאלות שלי הן:

1. האם פונקצית REPLACE פשוטה לתווים הבעייתיים תפתור את הבעיה?

2. אם אני מחליף את תו הגרש - האם ניתן לבצע הזרקה? מה זה משנה אם אפשר להכניס סימן אחוז (%) או קו תחתון (_) אם אין בכלל גרש?



תודה רבה למי שעוזר.
חזרה לתחילת העמוד הצג את כרטיס החבר של שמוליק חפש הודעות אחרות של שמוליק
 
notkok
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 13 January 2005
משתמש: מנותק/ת
הודעות: 88
נשלח בתאריך: 02 December 2006 בשעה 19:05 | IP רשוּם
ציטוט notkok

לגבי השאלה הראשונה, כעקרון זה יספיק אבל תצטרך לתת גם מענה למקרים בהם הנתונים שהתוקף שולח לא נכנסים כביטוי אלא כמספר (כמו בהשוואה של id).
2. הסיכון של קו תחתון הוא רק בשימושים של like, אבל אם אתה מסכנן את הגרש אז אי אפשר להשתמש בו (אלא אם אתה עושה חיפוש אז אפשר טיפה לשנות את התוצאות, אבל לא לפגוע באתר), אבל זה מכוון אותך לתשובה של השאלה הראשונה-יש גם השוואות שבהם אתה משווה מספרים ולא מחרוזות ואז לא צריך להשתמש בגרש כדי להזריק, לכן לא יספיק לך לסנן גרש בלבד.
חזרה לתחילת העמוד הצג את כרטיס החבר של notkok חפש הודעות אחרות של notkok
 
שמוליק
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 02 December 2006
משתמש: מנותק/ת
הודעות: 3
נשלח בתאריך: 02 December 2006 בשעה 21:08 | IP רשוּם
ציטוט שמוליק

תודה על העזרה.

אני בודק תקינות כל קלט.

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

כדי לכסות ב100%, אני אכניס לפונקציה את העניין של האחוז ושל הקו תחתון.


השאלה שלי היא האם יש צורך להחליף אותם בייצוג האסקי (או הHTMLי) כמו שכתבת במאמר, או שפשוט אפשר להחליף אותם בייצוג הVBי שלהם.

אני מתכוון להחליף כך:
replace(str,"_",chr(95))
replace(str,"%",chr(37))

האם זה פותר את הבעיה? או שזה בעצם אותו הדבר?

מה אתה חושב?

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


הצטרף / הצטרפה: 29 October 2006
משתמש: מנותק/ת
הודעות: 13
נשלח בתאריך: 03 December 2006 בשעה 02:09 | IP רשוּם
ציטוט tal-

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

לדוגמא המשתמש הכניס שם משתמש עם אחוז (%) מבחינתי זה ערך לא תקין ובמקום להמשיך ולהמיר אותו הייתי עוצר את התהליך עוד לפני הגישה ל- SQL SERVER... אבל זה משתנה בין כל מערכת ומערכת... אם כן יש צורך בתווים מסוג כאלה או אפילו גרש יש לדאוג לדוגמא שכל גרש שמגיע מומר ל- '\ ככה שהוא לא יהווה בעייה..אני בטוח שיש עוד פתרונות יותר יצירתיים.. אבל זאת אחת הדרכים..

מחשבה יצירתית שעלתה לי כרגע זה שב- DB עצמו פשוט תמיר את התו גרש לסימן אחר שלא מפריע לשאילתה להתבצע ולא יווצר בעיות אבטחה עקב השימוש בתו הנ"ל ובעת היציאה מה- DB פשוט להחליף את הסימן לגרש בחזרה ברמת האפליקציה שלך..

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

בהצלחה! :-)

טל.

חזרה לתחילת העמוד הצג את כרטיס החבר של tal- חפש הודעות אחרות של tal-
 
שמוליק
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 02 December 2006
משתמש: מנותק/ת
הודעות: 3
נשלח בתאריך: 03 December 2006 בשעה 08:36 | IP רשוּם
ציטוט שמוליק

טל
סימן אחוז אולי לא מתאים בשם משתמש אבל זה כלל לא משנה. אני מנסה למצוא פיתרון כולל.

אני מנסה לצמצם שתי החלפות (ביציאה ובהכנסה) להחלפה אחת בלבד - לפני ההכנסה. לכן המחשבה היצירתית של להחליף את התו גרש לסימן אחר היא משהו שאני מעדיף לא לעשות.

"זאת סתם מחשבה ... אני מציע שתחפש עוד מסמכים בנושא ותסתכל מעבר למה שנוטקוק וניר הציגו על עוד דרכים למניעת sql injection גם כשיש צורך בשימוש בגרש..."
לפי מה שאני יודע ומה שקראתי בהרבה מאמרים, ההחלפות האלה מספיקות כדי למנוע הזרקה. אם אתה יודע משהו שאני לא יודע אני אודה לך אם לא תרמוז, תשתף אותי (זה פורום, זה בדיוק המקום לעשות את זה )
חזרה לתחילת העמוד הצג את כרטיס החבר של שמוליק חפש הודעות אחרות של שמוליק
 
tal
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 03 December 2006 בשעה 15:34 | IP רשוּם
ציטוט tal

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

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

אתר שהייתי ממליץ לבקר בו הוא http://www.securityforest.com/wiki/index.php/Category:SQL_In jection

שבהחלט מציג מאמרים מעניינים לא רק בנושא של SQL INJECTION...

בהצלחה,

טל.

חזרה לתחילת העמוד הצג את כרטיס החבר של tal חפש הודעות אחרות של tal בקר בדף הבית של tal
 
notkok
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 13 January 2005
משתמש: מנותק/ת
הודעות: 88
נשלח בתאריך: 04 December 2006 בשעה 18:32 | IP רשוּם
ציטוט notkok

שמוליק כתב:
תודה על העזרה.

אני מתכוון להחליף כך:
replace(str,"_",chr(95))
replace(str,"%",chr(37))

האם זה פותר את הבעיה? או שזה בעצם אותו הדבר?

זה בידיוק אותו דבר...
אם אתה רוצה להמיר את זה לתו שלא יזיק ושזה יראה אותו דבר אז תשתמש בטבלה הזאת
http://www.asciitable.com/asciifull.gif
וכל תו שאתה רוצה להמיר תמיר אותו לפי הערך שמופיע בhtml...
חזרה לתחילת העמוד הצג את כרטיס החבר של notkok חפש הודעות אחרות של notkok
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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