איך לשמור על אבטחת מידע בכתיבת אתר PHP
זה כואב לראות אתר שלך או של לקוח מוחרב ע"י האקרים מדריך זה יתאר איך לשמור על רמת אבטחה נאותה בכתיבה של אתרים ב- PHP
What You'll Need
- PHP
- בניית אתרים
- אבטחת מידע
- טרור באינטרנט
Tips
אבטחה תמיד תבוא על חשבון נוחות - בטווח הקצר. לימים זה תמיד משתלם, במיוחד בעולם האינטרנט.
Steps
- 1
Step 1
מודעות בזמן הכתיבה - נסה לחשוב על איך מישהו יוכל לנצל את מה שכתבת לרעה - 2
Step 2
חנך עצמך - האינטרנט מלא באתרים מעולים עם מדריכי אבטחה (למשל "בקלות") - 3
Step 3
הכי חשוב - סנן קלט חיצוני !!! בכל מקום שאתה יכול בדוק מה מוזן - פרמטרים ב- URL, שדות בטפסים, קבצים שמועלים וכו' - 4
Step 4
חשוב לפתח ללא register_globals. שימוש במשתנה הזה יאפשר גישה קלה לכל משתנה ביישום ע"י כל גורם - 5
Step 5
דאג לגרסאות מאובטחות ומעודכנות של כל קוד שמגיע מצד ג' - במיוחד עורכי תוכן כמו SPAW - 6
Step 6
סינון של הקלט באמצעות קובץ שב- INCLUDE של כל דף או קובץ ראשון באתר שקורא לשאר הקבצים ובקובץ זה מבוצעים סינונים כללים לכל האתר כמו זיהוי, קיצור URL. אפשר גם להשתמש ב- auto_prepend_file כדי לוודא שימוש בכל הקבצים - 7
Step 7
יש להניח כהנחת בסיס שהמשתנים - POST_$ ו- GET_$ הם "נגועים" (כוון שהגישה אליהם חיצונית) ועלולים להכיל מידע שגוי. מומלץ להעביר את המשתנים האלה סינון לפני השימוש בהם בשאר הדפים. - 8
Step 8
שימוש בדווח שגיאות - error_reporting במצב E_ALL. ניתן לקבע באמצעות ()ini_set או עריכת ה- php.ini אם יש גישה (אפשר גם לשים php.ini יחודיי בכל תיקיה) - 9
Step 9
סינון שדות קלט בטופס צריך תמיד להעשות בצד השרת ! אפשר גם בצד הלקוח לטובת נוחות השימוש, אך אין לוותר על הסינון בצד השרת. - 10
Step 10
בסינון קלט, השתמש בפונקציות הבנויות: ()htmlentities strip_tags utf8_decode כדי למנוע XSS (מצב שבו האתר משמש מתווך לתקיפת הגולשים אליו ע"י שתילת קוד - לדוגמא js פולשני שמוצג בפוסט של פורום) - 11
Step 11
תמיד לשים את הקובץ שמכיל את ההרשאת לבסיס הנתונים במקום שאין אליו גישה מדפדפן, וניתן להגן עליו גם באמצעות ה- httpd.conf , לדוגמא סיומות inc: Order allow,deny Deny from all - 12
Step 12
כדי להגן מפני sql injections מומלץ לעבוד עם stored procedures אם זה נתמך ע"י בסיס הנתונים שלכם (mysql 5 למשל). כמו כן, סינון קפדני של השדות ימנע אפשרות של הזנת פקודות SQL ושרשורם לפקודות בקוד. - 13
Step 13
השתמש ב- if (!isset($_SESSION['initiated'])) { session_regenerate_id(); $_SESSION['initiated'] = true; } כדי למנוע התקפה של קיבוע session - 14
Step 14
השתמש ב- if (isset($_SESSION['HTTP_USER_AGENT'])) { if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) { /* Prompt for password */ exit; } } else { $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); } כדי להקשות על התקפת השתלטות על session - 15
Step 15
בשרת שיתופי, כדאי להשתמש ב- session_set_save_handler() כדי לשמור את המידע session ב- DB ולא בתיקיית TMP שנגישה לכל מי שחולק איתך את השרת. הדבר נכון גם לגבי קבצים רגישים, תמיד עדיף לשמור אותם בבסיס הנתונים ! - 16
Step 16
אם יש לך אפשרות (שרת ייעודי, או ספק אחסון שמשתף פעולה) השתמש ב- mod_security, מערכת זו תאפשר לך סינון של מספר רב של התקפות מוכרות, כבר ברמת השרת. - 17
Step 17
סיסמאות צריכות להיות ארוכות ומסובכות, עם מספרים וסימנים מיוחדים.