נגישות       נגישות
שינוי גודל טקסט:
א א א
שינוי צבעי האתר:
? מקשי קיצור:

לחיצה חוזרת ונשנית על המקש Tab תעביר אתכם בין הקישורים והאזורים השונים בעמוד.

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

Internet Explorer, Chrome ובגרסאות ישנות של Firefox: לחצו על מקש Alt ועל מקש המספר או האות על-פי הרשימה. ב Firefox 3 ומעלה: לחצו על המקשים Alt + Shift + המספר או האות.

S - עבור לתוכן הדף
L - חיפוש
1- עמוד הבית
2 - פרוייקטים
3 - מדריכים
4 - אודות
5 - צרו קשר
6 - הצהרת נגישות
 

מסננים מובנים שמספקת שפת ה-PHP

מחבר:
בתאריך:

 

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

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

הפונקציה filter_var חייבת לקבל את שני הפרמטרים הבאים:

1. המידע שהתקבל מהמשתמש
2. כיצד לטפל במידע? באמצעות קבועים שמוגדרים מראש על ידי PHP

filter_var(כיצד לטפל, קלט מהמשתמש)

 

שימוש בקבועים מסוג FILTER_VALIDATE לדחיית מידע שאינו קביל

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

$valid_email = filter_var ($email1, FILTER_VALIDATE_EMAIL);

הפונקציה תחזיר את כתובת המייל במידה והיא כתובת קבילה, או FALSE בכל מקרה אחר. לדוגמה:

$email1 = 'yossef@reshetech.co.il';
$email2 = 'reshetech1@*gmail.com';
$valid_email = filter_var ($email1, FILTER_VALIDATE_EMAIL);
 
if($valid_email){
  echo " הוא מייל קביל <i>" . $valid_email . "</i>";
} else {
  echo "המייל אינו קביל";
}

אם נבדוק באמצעות המשתנה $email1 נקבל:

הוא מייל קביל yossef@reshetech.co.il

אבל במידה וננסה מייל שאינו קביל, כדוגמת המשתנה $email2, נקבל:

המייל אינו קביל

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

$url1 = 'yossef@reshetech.co.il';
$url2 = 'http://reshetech.co.il';
$valid_url = filter_var($url2, FILTER_VALIDATE_URL);
 
if($valid_url){
  echo " היא כתובת אינטרנט קבילה. " . $valid_url;
} else {
  echo "כתובת בלתי קבילה";
}

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

 

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

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

לדוגמה, הקבוע FILTER_SANITIZE_NUMBER_INT מסנן את המספר, ומשאיר רק ספרות פלוס ומינוס. לדוגמה:

$int = "1,734.56E3";
$filtered_int = filter_var ($int, FILTER_SANITIZE_NUMBER_INT);
echo $filtered_int;

ידפיס למסך:

1734563

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

$str = "1,734.56E3*COM";
$filtered_int = filter_var ($str, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
echo $filtered_int;

ידפיס למסך:

1734.563

דגל אחר מאפשר לנו להשאיר את E או e במספר כפי שמקובל בשיטת כתיבה מדעית. הדגל הזה הוא FILTER_FLAG_ALLOW_SCIENTIFIC.

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

$filtered_float = filter_var ($str, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_SCIENTIFIC | FILTER_FLAG_ALLOW_THOUSAND);
echo $filtered_float;

שידפיס למסך:

1,734.56E3

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

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

$html_string = "<p> "<iאתמול<"</i>תאריך הפרסום: "</p>";
$filtered_string = filter_var ($html_string, FILTER_SANITIZE_STRING);
echo $filtered_string;

ידפיס את התוצאה הבאה למסך:

אתמול :תאריך הפרסום

נקי מתגיות ה- HTML.

 

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

לכל מדריכי ה-PHP

 

 

הוסף תגובה חדשה

 

= 7 + 8

תמונת המגיב

ערן בתאריך: 17.11.2017

אני לומד עכשיו תכנות אינטרנט,
והמדריכים שלך מעולים...