מדריך: בדיקות קלט ושיטות התגוננות מפני SQL Injection

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

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

  1. דעו מה אתם מצפים לקבל.
    במידה ואתם מצפים לקבל סוג משתנה כלשהו (לדוגמא, מספר שלם – Integer, או תו בודד וכו'), עליכם תמיד לבצע בדיקה לקלט! כך למשל, במידה ואתם מקבלים משתנה Integer, תמיד שימו לב להמיר את המשתנה שמתקבל ל-Integer. ככה תיפטרו ממספר לא מבוטל של ג'יפה בדרך. במידה ואתם יודעים שאתם מצפים לתו בודד (לדוגמא כאשר אתם בונים מנגנון סינון עפ"י אות), תמיד תוכלו לקחת מהמחרוזת שמתקבלת מהמשתמש אך ורק את התו הראשון, ורק את התו הבודד שלקחתם תוכלו לקחת אל השאילתה.
  2. נטרו את הקלט, וחפשו מילות SQL.
    במידה ואתם בכל זאת לא יודעים מה המשתמש יכניס (שימו לב שממש לא רצוי לעבוד כך!), תמיד עליכם לשער שהמשתמש מנסה להשתמש במילים שמורות של שפת SQL. לכן עליכם לנטר מילות חיבור נפוצות ב-SQL, לדוגמא, UNION, SELECT, DROP.
    הסתייגות: שפת SQL היא שפה פשוט נורא, והרבה פעמים המילים Select, Union, Drop הן מילים לגיטימיות שיכולות להגיע ממשתמש לגיטימי, לכן יש להפנות תשומת לב לבדיקת הקלט.
  3. חסכו בהרשאות למשתמש שמבצע את השאילתות באתר.
    צרו משתמש חדש במסד עבור הצגת האתר ותנו לו הרשאות קריאה בלבד על טבלאות ספציפיות מהמסד. שימו לב שניתן להגדיר עבור משתמש הרשאות ספציפיות ושהמשתמש הזה לא נועד להיות מנהל מערכת, כך שאין שום צורך שהמשתמש שמציג את האתר יוכל להקיש את הפקודה DROP TABLE. כמו כן, גם Union (שנשמע תמים), יכול להיות נוראי כשזה מגיע לשליפות SQL. בעזרת Union פשוט ניתן "לחבר" בין הטור בטבלה שאותו העמוד צריך להציג, לבין טור סיסמאות המשתמשים באתר.
    הערה: כתבתי מדריך מפורט למידור הרשאות במשתמשים במסדי נתונים.
  4. בטלו פלטי הודעות השגיאה.
    אם כבר מנסים לפרוץ לכם את האתר, לפחות שלא יראו מה שהם עושים.
  5. הצפינו את המידע.
    צאו מנקודת הנחה שהכל כשל, ושההאקר הצליח להגיע אל המידע למרות הכל. לכן תמיד עדיף לבצע הצפנה של מידע רגיש וחשוב ולא לשמור אותו במסד הנתונים כ-Plain Text. האופציה הטובה ביותר היא לשמור Salted Hash במסד הנתונים, במקום את הסיסמא, ואת האותנטיקציה לבצע במהלך אימות הקלט.

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

4 תגובות ל “מדריך: בדיקות קלט ושיטות התגוננות מפני SQL Injection”

  1. […] למדנו מהמדריך הארוך הזה? בעיקר – שאי אפשר לסמוך על המשתמש. ולכן תמיד צריך להתגונן ובכלל לא להגיע למצב שבו המשתמש […]

  2. […] מדריך: בדיקות קלט ושיטות התגוננות מפני SQL Injection […]

  3. […] נכונה של משתמשים יכולה למנוע הרבה מאוד כאב ראש, כאשר לא עושים Escaping נכון […]

  4. אם תכלו לעשות מדריך SQL injection בכמה שיטות וגם למדריך טוב לxss

הוסף תגובה