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

קריקטורה בת >15 שנים. אז, הצהרות מוכנות היו חדשות - לפחות עבור מסדי נתונים בקוד פתוח כמו MySQL וסביבות תכנות כמו PHP. היום, אין באמת תירוץ לזה.

...
זה מבלבל את דעתי שמפתחי אתרים עד היום לא מבינים שיטות עבודה מומלצות בנושא...

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

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

מקדימים קישורי XKCD המופיעים בתגובות כעת על ידי הכללתם במאמר?

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

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

הִיסטוֹרִיָה

MOVEit שוחרר בשנת 2002 על ידי Standard Networks.[13] בשנת 2006, החברה פרסמה אינטגרציה בין MOVEit ו תוכנת אנטיוירוס כדי לעצור את העברת הקבצים הנגועים.[14]

Ipswitch רכשה את MOVEit ב-2008 כאשר החברה רכשה את Standard Networks.[15] MOVEit Cloud הוכרז בשנת 2012 בתור א מבוסס ענןהעברת קבצים תוכנת ניהול.[16] MOVEit Cloud הייתה תוכנת העברת הקבצים המנוהלת בענן הראשונה ברמה הארגונית. זה ניתן להרחבה עם ויכול לשתף קבצים ממערכת למערכת, קבוצה או מאדם לאדם.[17]

בשנת 2013, לקוחות MOVEit שוחררו עבור iOS ו דְמוּי אָדָם פלטפורמות. המהדורה כללה אשף תצורה, כמו גם דואר אלקטרוני הצפנה.[1][18]

Ipswitch Analytics שוחרר בשנת 2015 כדי לנטר ולדווח על נתונים באמצעות תוכנת MOVEit. הנתונים האנליטיים כוללים ניטור פעילות ויצירת דוחות אוטומטית. Ipswitch Analytics יכול לגשת לנתונים משרתי העברת קבצים ואוטומציה של MOVEit.[19][20] באותה שנה, Ipswitch Failover שוחרר. התוכנה יכולה לחזור יעדי נקודת התאוששות (RPO) בשניות עם יעדי זמן התאוששות (RTO) של פחות מדקה, מה שמגביר את הזמינות של MOVEit.[21]

אה, זה לא רק Webdevs. עבדתי על תוכניות ג'אווה שהשתמשו ב-StringBuffer/Builder, ותוכניות C שנפרצו לתוך מערכים בגודל קבוע עבור 95% מהשאילתות - עם שאילתה אחת או שתיים עם פרמטרים מפוזרים על ידי אותם מפתחים. יש אנשים שפשוט נראים מתים על הפיכת שאילתות SQLs למסובכות יותר מהנדרש.

מקדימים קישורי XKCD המופיעים בתגובות כעת על ידי הכללתם במאמר?

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

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

זו לא אשמתו, כמו שיש אומרים, של SQL עצמו. השתמשתי בבסיסי נתונים שהוגדרו עוד בשנות ה-70, והם תמיד החליפו נתונים עם יישומים במארח משתנים, או לפחות מאגרי נתונים ייעודיים בגודל קבוע (IMS למשל, אם כי זה לא יחסי). ולכמה DBMSs, כמו DB2 העתיק כיום, יש הרשאות נפרדות לאפשר כל צורה של SQL דינמי בכלל (מלבד דרך כלי עזר כמו DSNTEP2 ו-DSNTIAUL, למרות שראיתי את אלה שעברו התעללות בדרכם שלהם) ש-DBA יעשה לך את תנועת הירידה אם תנסה לעשות בַּקָשָׁה.

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

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

... כנראה שאנחנו כבר מטוקנים...

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

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

שדרוג מוצר שנמצא בקטגוריה 2 הוא מאמץ שלוקח זמן ויקר, מה שאומר שזה קורה רק אם חברה נאלצת.

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

מקדימים קישורי XKCD המופיעים בתגובות כעת על ידי הכללתם במאמר?

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

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

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

זו לא אשמתו, כמו שיש אומרים, של SQL עצמו. השתמשתי בבסיסי נתונים שהוגדרו עוד בשנות ה-70, והם תמיד החליפו נתונים עם יישומים במארח משתנים, או לפחות מאגרי נתונים ייעודיים בגודל קבוע (IMS למשל, אם כי זה לא יחסי). ולכמה DBMSs, כמו DB2 העתיק כיום, יש הרשאות נפרדות לאפשר כל צורה של SQL דינמי בכלל (מלבד דרך כלי עזר כמו DSNTEP2 ו-DSNTIAUL, למרות שראיתי את אלה שעברו התעללות בדרכם שלהם) ש-DBA יעשה לך את תנועת הירידה אם תנסה לעשות בַּקָשָׁה.

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

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

ממשק MySQL המקורי ב-PHP/FI 2.0 ו-PHP 3->4.0 לא אפשר הצהרות מוכנות. היו פונקציות לברוח ממיתרים בצורה מתאימה, אבל היית צריך לעשות את העבודה בעצמך (הייתה אפשרות של "ציטוטים קסומים" בערך-כמעט-אוטומטי עשה את העבודה, אבל זה הוצא משימוש והוסר כי זה לא הספיק ונועד לקוד גרוע עם נורא הנחות)

PHP 5 הוסיף מודול MySQLi חדש (משופר MySQL) שאכן תומך בהצהרות מוכנות, PHP 5.5 הוציא משימוש את המודול הישן, והחל מ-PHP 7, מודול MySQL הישן נעלם.

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

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

ולהקשר PHP5 היה ארוך בשן (אם כי בשימוש נרחב) לפני יותר מ-10 שנים. אין תירוץ.

...תלמיד ששמו המלא הוא "רוברט'); תלמידי זרוק שולחן;--?" (ללא המרכאות).

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

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

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

ההודעה האחרונה בבלוג

מישהו עושה קירור מים בימים אלה?
October 07, 2023

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

מישהו עושה קירור מים בימים אלה?
October 07, 2023

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

מארז מחשב וינטג' ורטרו מוצא חוט
October 07, 2023

הנוסטלגיה לוהטת עם שחזור מחשבים מעידן MS-DOS ובניית סליפר. דיברתי עם "פילנתרופיה של PC"היום והוא מתכנן טיול לקניית מגדלים מעניינים משנות ה-90/תחילת...