פילטור קלט ב-PHP

הסבר קצר מאד על פילטור נכון של קלט ב-PHP ומה הדרך המהירה והיעילה ביותר לעשות אותו.

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

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

ב-PHP מגרסה 5 יש לנו דרך נפלאה להריץ פילטרים – באמצעות PHP filters. איך משתמשים בהם? הכי טוב עם דוגמה מאד מאד פשוטה (ותסלחו לי שאני משתמש בדוגמה כזו) :


$email = $_GET['email'];
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {		
	print 'Email OK!';
} else {
	print 'Email is not OK';
	die;
}

מוקד העניין הוא פונקצית filter_var שמקבלת שני פרמטרים – מחרוזת טקסט כלשהי וקבוע כלשהו שלפי שמו אפשר להבין שהוא הוא הפילטר שלנו שבמקרה הזה מפלטר לפי מייל (ואם לא הבנתם ש-FILTER_VALIDATE_EMAIL מפלטר מייל, סימן שאתם במקצוע הלא נכון). במידה והפילטור עובר תקין, מוחזר לנו TRUE ובמידה ולא, מוחזר FALSE. מה אנחנו עושים? זה כבר תלוי בסקריפט שלנו.

נשאלת השאלה אילו עוד פילטרים יש חוץ מ-FILTER_VALIDATE_EMAIL? רשימה מלאה של הפילטרים נמצאת בדוקומנטציה של PHP וכדאי להציץ בה. בפעם הבאה שאתם מפלטרים פלט, אפשר פשוט להשתמש בפילטרים האלו. אולי החלק הזה של הקוד לא זוהר כמו UI שאפשר להטמיע, אבל הוא חשוב לא פחות.

פוסטים נוספים שכדאי לקרוא

גלילה לראש העמוד