filter_input – דרך טובה הרבה יותר לקבלת משתני GET או POST

הסבר על קבלת משתנים לתוך סקריפט של PHP בדרך טובה ומאובטחת

לא מעט מתכנתים משתמשים ב-GET_$ או POST_$ כאשר הם רוצים לקבל פרמטרים של GET או POST. מדובר במשתנים גלובליים שמכילים את כל הפרמטרים. למשל, אם אני רוצה לקבל את הפרמטר myparam מהכתובת http://example.com?myparam=value, אני אכתוב את הקוד הבא:


$_GET['myparam'];

או:


$_REQUEST['myparam'];

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

איך משתמשים בה? מאד פשוט! אם אני רוצה לקבל פרמטר GET של myparam זה מה שאני צריך להכניס:


filter_input(INPUT_GET, 'myparam');

מה היתרון הגדול של filter_input? שאני יכול להכניס גם פילטרים של PHP כפרמטר השלישי! למה צריך להכניס פילטרים? כדי לפלטר או לעשות סניטציה לפרמטר. כך למשל:


filter_input(INPUT_GET, 'myparam', FILTER_SANITIZE_EMAIL);

מבצע מיד סניטציה בפרמטר GET של מייל. אני יכול גם לפלטר ולא רק לעשות סניטציה. היתרון הגדול ב-filter_input הוא שמאד מאד קל להשתמש בפילטרים השונים. ואם קל להשתמש בהם, גם הסיכוי שאנחנו נשתמש בהם עולה.
ניתן להשתמש בפונקציה הזו כדי לקבל משתני שרת (SERVER_$) או משתני סביבה ולפלטר גם אותם. חלק מכם בוודאי ישאלו למה צריך לפלטר משתני שרת? התשובה היא שניתן לשנות חלק ממשתני השרת – כמו למשל ה-Referrer ואם אנחנו משתמשים בהם בסקריפט שלנו או כותבים אותם למסד הנתונים שלנו, תוקף מיומן מספיק יכול להשתמש בהם כנקודת תורפה לחדירה אל הסקריפט שלנו. אם נשתמש ב-filter_input במקום המערכים הגלובליים, אנחנו פשוט נתרגל לפלטר או לעשות סניטציה לכל פרמטר ופרמטר – גם אם אנחנו חושבים שהוא בטוח.

מבחינת מהירות או יעילות, אין הבדל ממשי – אבל מבחינת בטיחות, כדאי הרבה יותר להשתמש בזה.

מידע נוסף ודוגמאות נוספות ל-filter_input נמצאות בדוקומנטציה של PHP.

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

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