03-07-2009, 17:32
|
|
|
חבר מתאריך: 07.10.04
הודעות: 1,277
|
|
רשימת כל הפונקציות שיעזרו לך להגנה זה רעיון טוב.
בכל מקרה חשוב לזכור שתמיד אתה בודק את הקלט בהתאם למטרה שלך
ולקלט שאתה מצפה לו. ואתה מסנן לא רק את הקלט - המידע שאתה מקבל,
אלא גם את הפלט. למשל כאשר אתה מדפיס תוכן ממסד הנתונים,
ייתכן שהוא ישתנה, ובכל מקרה תרצה להשתמש ב-htmlentities כדי לקודד את הטקסט.
אם למישהו יש עוד פעולות שיעזרו, תוסיפו.
1. המרה - כאשר מדובר במספר, יש כמה גישות כמו שהראתי, אבל בסופו של דבר
אתה תמיר את הקלט (אם או בלי לבדוק שזה מספר) לטיפוס של מספר ע"י (int).
כאשר זה כבר מספר, בדר"כ אין צורך לעשות יותר בדיקות תקינות.
2. קבוצת הפונקציות Ctype, שמאפשרות לך לבדוק כל מיני סוגים של קלטים,
לדוגמה: האם הקלט הוא מספר, אותיות, אותיות ומספרים ביחד וכו'.
תמיד שיש לך אפשרות להשתמש בזה, תעשה את זה (יעילות גבוהה).
3. קבוצת הפונקציות is_* שנועדו לאפשר לך לבדוק אם קיבלת את הקלט שציפית לו.
לדוגמה: is_numeric, is_string, is_array וכו'.
4. קבוצת הפונקציות Filter, שמאפשרת לך או לבדוק (Validate filters)
או "לנקות" (Sanitize filters) את הקלט.
לדוגמה: בדיקה האם קיבלת כתובת של אתר, כתובת אימייל, IP.
וגם "סינון" של הקלט בהתאם לקלט שאתה מצפה לו.
5. ביטויים רגולריים - לפעמים אין דרך אחרת לבדוק. הכי פחות יעיל.
תעדיף להשתמש במציאת חלק ממחרוזת, לדוגמה strpos, כשאפשר.
אם אתה חייב ביטויים רגולריים לצורך בדיקת תקינות, תעזר בפונקציה preg_match.
אפשר גם להחליף תבניות מסוימות באחרות, בעזרת preg_replace למשל.
6. הכנסת קלט למסד נתונים - יש כל מיני שיטות להגנה, בעיקר מפני SQL Injection.
לכל הפחות תשתמש בפונקציה של escape כמו mysql_real_escape_string.
הטכניקה הכי בטוחה שאני מכיר היא Prepared statements והיא מתאפשרת
ב-PHP בעזרת הרחבה שנקראת PDO (לא מכיר דרך אחרת).
7. הדפסת פלט למסך - אתה צריך לקודד את הקלט שאתה מדפיס.
להגנה מפני XSS בעיקר. הפונקציה המומלצת היא htmlentities.
מה שדור דיבר עליו - הפרמטר השלישי הוא קידוד הטקסט. מומלץ להשתמש בזה.
לדוגמה:
קוד PHP:
htmlentities($html, ENT_QUOTES, "UTF-8");
אפשר להשתמש גם ב-strip_tags להסרה של תגי HTML.
בהצלחה.
נערך לאחרונה ע"י Sagilevi בתאריך 03-07-2009 בשעה 17:49.
סיבה: הוספה, תיקון שגיאות כתיב
|