התלמוד של המפתחהתלמוד של המפתח

מסכת פיתוח מאובטח

מסכת הזרקת קוד

3 הלכות

א

SQL Injection

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

כתוב בספר ההגדה של האקרים: "מה משתמש תמים אומר? שמי הוא יוסי." ומה משתמש רשע אומר? שמי הוא '; DROP TABLE users; -- קורה מה שקרה לאותו דוולופר שלא השתמש ב-Prepared Statements. ואין לו תרופה אלא מיגרציה חדשה ודמעות.

ב

כלל גדול: אל תאמן בקלט

כלל גדול בפיתוח מאובטח: אל תאמן בשום קלט. לא בשדה טקסט, לא בפרמטר URL, לא בהדר, ולא בעוגיה. ואפילו אם הקלט נראה תמים — חזקה שמישהו ינסה להכניס בו <script>alert('pwned')</script> בשעת לילה.

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

ג

צד לקוח אינו צד שרת

כתוב בצד הלקוח אינו כתוב בצד השרת. כל ולידציה שקיימת רק בפרונט — אינה ולידציה, אלא הצעה שהמשתמש רשאי להתעלם ממנה.

אמר ריש לקיש: ראיתי טופס שכתבו עליו "שדה מספרים בלבד." שלחתי לו אות — התקבלה. שלחתי לו פסיק — התקבל. שלחתי לו בקשת SQL שלמה — התקבלה ובוצעה. אמרתי: הא קמן — כתוב בצד הלקוח אינו כתוב בצד השרת.