טיפים לאתר תקין ומאובטח יותר

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

ביטול הצגת רשימת תיקיות בשרת

במידה ויצרתם תיקייה חדשה בשרת שלא מכילה קובץ index.html או index.php הגולשים יכולים לגלוש אליה ולראות את תוכן התיקייה, מה שלא נחמד ולא מומלץ בכלל.
על מנת למנוע זאת, פתחו את קובץ ה-htaccess שלכם והכניסו בו את השורה הבאה:

Options -Indexes

מעוניינים ללמוד עוד דברים מגניבים על htaccess? כתבתי מדריך במיוחד על הנושא: לגזור ולשמור: פקודות htaccess נפוצות

הגנה של COOKIES

בתור מפתחים אנו עובדים עם COOKIES פעמים רבות.
Cookies נתון לסכנות רבות ולכן כדאי להיזהר, הגדרות שכדאי להכיר:

session.cookie_httponly

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

session.cookie_secure

במידה ומותקנת לכם תעודת SSL בשרת (המלצה בפני עצמה!), מומלץ להגדיר כ-TRUE.
הגדרה זו תגרום לעוגייה לעבוד בפרוטוקול https בלבד.

ניתן להגדיר ערכים עלו בקובץ php.ini שבשרת.
במידה ואין לכם גישה לקובץ זה, ניתן לשים את השורות הבאות בראש כל קובץ במערכת שלכם (פחות מומלץ!):

ini_set( 'session.cookie_httponly', 1 );
ini_set( 'session.cookie_secure', 1 );

בדיקה וסינון כל קלט המתקבל מהמשתמש

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

()htmlentities
()strip_tags
()stripslashes
()intval

שימוש בהרחבת PDO לעבודה מול בסיס הנתונים

הרחבת PDO שעליה כתבתי במדריך PDO הינה הרחבה מתקדמת ומומלצת מאוד לעבודה מול בסיסי נתונים.
PDO עובדת באופן מונחה עצמים ותומכת במחזיקי מקום (Prepared Statements) מה שמוסיף לה אלמנט אבטחתי משמעותי מאחר ואנו מזינים את הערך האמיתי ממש לפני ביצוע השאילתא, אמצעי הגנה נוסף מ-SQL injection.

דוגמא לשימוש במחזיקי מקום:

$stmt  = $dbh->prepare("SELECT * FROM users WHERE city = ?");
$stmt->bindValue(1, "tel-aviv");

אי הצגתן של שגיאות ב-Production

במהלך מלאכת הפיתוח, כאשר משהו לא עובד, השגיאות עוזרות לנו מאוד להבין מה השתבש אך מיד עם העלאת האתר לאוויר, אני ממליץ לכבות את הצגתן של השגיאות וזאת מפני שלפעמים הן יכולות לספר קצת יותר מדי (הטכנולוגיה שבה אנו משתמשים, שמות תיקיות וקבצים וכ'ו).
כיצד נכבה את הצגתן של השגיאות?
אם יש ברשותינו גישה לקובץ php.ini, נפתח אותו ונחפש "display_errors", במידה והערך הוא On. שנו אותו ל-Off ושמרו.
במידה ואין ברשותכם גישה לקובץ זה, שימו את השורה הבאה בחלק העליון של כל דף במערכת (בקובץ ה-config שאחראי על החיבור למסד הנתונים למשל):

error_reporting(0);

להימנע משימוש בתגים קצרים

בשפת PHP ישנם כמה קיצורים שדי מפתה להשתמש בהם (גם אני חוטא בכך לפעמים..) אך לא הייתי ממליץ להשתמש בהם, מדוע?
1. הם לא באמת מקצרים יותר מדי, בואו לא נשקר לעצמנו.
2. ישנם שרתים שקיצורים אלו לא מוגדרים או "מנוטרלים" אצלם והדבר עלול להשבית לכם את כל הסקריפט. כן, לא נסחפתי.

על אילו קיצורים אני מדבר?
פתיח ללא "php":

<?
// PHP Code
?>

וויתור על המילה echo:

<?= $a; ?>

שימוש ב-LIMIT בשאילתות

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

העלאת קבצים

אם אתרכם לא מאפשר למשתמשים להעלות קבצים, אנא וודאו כי ההגדרה בקובץ php.ini היא off:

file_uploads=Off

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

upload_max_filesize = 10M

בנוסף, בעת העלאת קבצים לשרת, השתדלו שהקבצים לא יהיו בתיקיית השורש של האתר.
במקרה של פרצה בתיקייה זו (הרשאות יתר למשל) יהיה קשה יותר להגיע לקבצי האתר עצמו.

אתרכם בנוי על וורדפרס?

הציצו בבמדריך לאבטחת אתרי וורדפרס שכתבתי.

בהצלחה!

נהנת ממאמר זה? לחץ כאן על מנת להירשם לרשימה התפוצה ולקבל עדכונים על מאמרים נוספים!

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *