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.

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

פתרונות ומאמרים על פיתוח אינטרנט

יישום של nonce על מנת להגן מפני התקפות injection

בפוסט הקודם הסברתי על hash עם CSP על משאבי inline – שזה נחמד ומעולה אבל פחות ישים בעולם האמיתי שבו בדרך כלל התוכן ה-inline (בין

בינה מלאכותית

להריץ ממשק של open-webui על הרספברי פיי

להפעיל ממשק של צ׳אט ג׳יפיטי שאפשר לגשת אליו מכל מחשב ברשת הביתית על רספברי פיי עם מודל בשם tinydolphin שרץ על רספברי פיי.

DALL·E 2023-10-21 22.28.58 - Photo of a computer server room with red warning lights flashing, indicating a potential cyber threat. Multiple screens display graphs showing a sudde
יסודות בתכנות

מבוא לאבטחת מידע: IDOR

הסבר על התקפה אהובה ומוצלחת שבאמצעותה שואבים מידע מאתרים

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

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

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