האם יש

  • פותח הנושא XiroX
  • פורסם בתאריך

XiroX

New member
האם יש

פקודה כלשהי שמונעת SQL-injection או שאני צריך לבנות איזשהו מנוע שימנע זאת? אם כן, איך אני יודע להבדיל לדוגמה, ממשהו שכתב select למישהו שכתב את זה כחלק ממשפט שלם. או, האם יש דרך לבדוק אם פונקציה מסויימת ב SQL היא תקינה בלי להריץ אותה (ואז בעצם לדעת אם יש sql-injection כי הוא מריץ פקודת sql).
 

XiroX

New member
אה

addslashes פותר גם את זה? אם כך אז אין בעיה. אני השתמשתי בו מסיבות אחרות לגמרי.
 

Terminal Frost

New member
לא לחלוטין.

אבל הוא נותן פיתרון מצויין לחסימה על שדות חיפוש (סטרינגים). אם אתה נותן לאנשים לחפש אצלך ע"פ ID (איפה שaddslashes לא יעזור), אז יש לך כנראה בעיה בתכנון הDB.
 

kensaggy

New member
מממ...לא לגמרה..

addslashes לא פותר sql injections כלל. הדבר היחיד שהוא עוזר בו בקשור ל SQL זה למקרה בנשלח לשאילתא משהו עם גרש\גרשיים שיכול לשבש את השיאלתא מבחינה זאת. אני ממליץ שתקרא את השרשור הזה: http://www.tapuz.co.il/tapuzforum/main/Viewmsg.asp?forum=312&msgid=27555101 בגדול אתה צריך לבדוק שמה שנכנס, הוא מה שאמור להיכנס ואין שם סימנים שלא אמורים להיות שם
-חן.
 

XiroX

New member
הבעיה שלי היא

ש 2 הסקריפטים שניתנים שם לא נותים למשתמש להכניס משפטים עם המילים השמורות של SQL. כך לדוגמה יהיה מאוד קשה למשתמש דובר אנגלית אם הוא יצתרך כל הזמן להמנע ממילים כמו select or delete וכו'. מה שאותי עניין זה אם יש פקודה שבודקת אם משפט מסויים הוא בר הרצה בלי הרצה ממשית של השאילתה, כלומר, simulate או משהו בסגנון.
 

kensaggy

New member
ממממ....

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

XiroX

New member
אממ

כך: נגיד שמישהו הכניס הודעה שיש בה sql_injection שמוחק משהו. אני רוצה לדעת אם יש אפשרות לקחת את ההודעה שלו, נניח $messages ולהריץ אותה כשאילתה, אבל כסימולציה, כך שהוא רק יחזיר לי אמת אם זאת שאילתה תקינה, שקר אחרת, בלי למחוק כלום, ואז אני אוכל לדעת אם יש שם sql_injection
 

Terminal Frost

New member
הייתי מציע

שתנסה לעשות כזה דבר ולראות... תמיד אפשר לעשות ROLLBACK אם אתה יודע מה שינית. אתה גם יכול להשתמש בטבלת INNODB שתומכת בTRANSACTIONS, ופשוט להריץ את השאילתה ולעשות ROLLBACK.
 

kensaggy

New member
ממממ...

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