מהו Framework טוב ?

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

CodeIgniter הוא Framework לשפת PHP, אשר דואג לכך שתעשה סדר בתוכנית שלך, בכך שתעבוד עם MVC. כאשר יש חובה בגישה של Object Oriented, גם כאשר לא באמת צריך.

עד כאן, נניח שהכל בסדר. עכשיו מתחילות הבעיות:

  1. כל פרמטר POST עובר סניטציה בלי קשר לצורך שלי, כאשר המודול העושה את זה, מכיל כמעט 900 שורות קוד.
  2. אם יש צורך לחבר משהו קיים, חייבים לכתוב איזשהו מודול שיחבר בין שניהם, שידבר בCodeIgniter.
סניטציה היא ניקוי לתוכן, ע”מ שלא תהיה פגיע להתקפות שמנסות לנצל את הקלט כדוגמת Cross Site Scripting. נשמע חשוב נכון ? ובכן כן, אבל תלוי איפה !
כאשר אני רוצה לבצע סניטציה על הקוד שלי (כשאני מייצר את הקוד סניטציה בעצמי), ככה זה נראה (בתור דוגמה בלבד):
function sanitize_code($name, $filter)
{
$filter_chars['num'] = '0-9';
$filter_chars['lc'] = 'a-z';
$filter_chars['uc'] = 'A-Z';
$filter_chars['Alpha'] = 'a-zA-Z';
$filter_chars['AlphaNum'] = 'a-zA-Z0-9';
/* ... */
$splited = explode('|', $filter);
$result = "";
foreach($splited as $type) {
$result .= $filter_chars[$type];
}
$result = "/[^$result]/";
$regex = preg_replace($result, '', $name);
return $regex;
}

וזהו, עכשיו כאשר ארצה להשתמש בזה, אעשה את זה כך:

$name = sanitize_code($_POST['firstname'], 'Alpha');

כמו שאפשר לראות, אני מונע התקפות XSS, רק משום שאני מעיף כל תו שהוא לא A-Z או a-z, ובכך מנעתי את ההתקפה (כולל התקפת SQL Injection).

אז אתם בטח שואלים למה לא פשוט להחיל את זה על כל הפרמטרים של POST ו GET. התשובה היא פשוטה: מה קורה אם יש לכם שדה free text, שהכל יכול להגיע בתוך הקוד ? אז פתאום אם אני אסיר תווים "מסוכנים", אני אפגע בתוכן. יותר מזה, מה קורה אם אני רוצה לנתח את הטקסט הזה בצורה זו או אחרת ? אם אני אעשה נגיד escaping לפני התצוגה, זה יכול לפגוע במשמעות הטקסט. אבל codeIgniter עושה בדיוק את זה – escaping.

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

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

לכן לדעתי CodeIgniter הוא לא Framework יעיל או טוב.

2 מחשבות על “מהו Framework טוב ?

  1. מישהו שמבין בזה

    לדעתי מה שאמרת לא כל כך נכון. אני עובד עם CodeIgniter כבר למעלה מחצי שנה ואני נהנה מזה מאוד. ה-Framework מקצר משמעותית את תהליך הפיתוח והופך את תחזוקת האפקלציה להרבה יותר נוח וקליל. עבדתי בעבר עם כמה Frameworks (כולל CakePHP ו- Symphony ומערכת ניהול התוכן המעולה – שדרך אגב, האתר הזה מבוסס עליה – דרופל) ולדעתי היתרון הענק של CodeIgniter עליהם זה בפשטות ובחופש שהוא נותן לך. משהו אחד שחסר לדעתי ב-CodeIgniter זה Scaffolding ברמה מסחרית (או כמעט מסחרית) כמו זה של CakePHP ו- Ruby on rails.

    בקשר ל-Automatic escaping ב-CodeIgniter, אני חושב שזה רעיון מעולה שזה יעשה אוטומטית כי זה מקל את הפיתוח ומפחית את שורות הקוד שיש לכתוב (ובדרך גם כמה טעויות ומוקומות שבהם שכחנו לעשות Escaping מה שעלול לצור חורי אבטחה חמורים). בקשר לשדה FREE, אני ממש לא חושב שזה רעיון טוב בכל אתר. כי טעות קטנה וכל ה-DB יכול להימחק ואם אין גיבוי אז זו בעיה רצינית.

    בקיצור (לפחות לדעתי) CodeIgniter זה ה-Framework הכי קל לשימוש והכי יעיל לבניית אתרים קטנים עד בינוניים.

  2. ik_5 מאת

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

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

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

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

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

    האתר הזה ד"א הוא לא דרופל אלא wordpress (עוד משהו שכתוב בPHP).

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

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת /  לשנות )

תמונת גוגל

אתה מגיב באמצעות חשבון Google שלך. לצאת מהמערכת /  לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת /  לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת /  לשנות )

מתחבר ל-%s

This site uses Akismet to reduce spam. Learn how your comment data is processed.