כיצד לאגור את ה- PHP שלך לביטחון טוב יותר

PHP נמצא בשימוש נרחב בקרב אתרים רבים & יישומים, אך יש להקשיח אותם לצורך אבטחה. להלן מספר טיפים מתקדמים לאבטחת קובץ התצורה של PHP.


כיצד להקשיח PHP

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

אתר את קובץ התצורה של PHP

שם קובץ התצורה עבור PHP הוא php.ini, אותו תצטרך לערוך. מיקום הקובץ משתנה בהתאם לחברת האירוח וסוג השרת שלכם.

ערוך באמצעות אירוח משותף

אם אינך בטוח היכן ממוקם קובץ ה- php.ini שלך, צור קשר עם ספק האירוח שלך. ספקים מסוימים דורשים להציב הגדרות PHP בתוך קובץ ה- .htaccess בשורש האינטרנט. אם זה המקרה, יש להוסיף הגדרות PHP אחת בכל שורה בפורמט “ערך שם php_value”. זכור כי ספק האירוח שלך עשוי למנוע שינוי בהגדרות מסוימות.

ערוך באמצעות VPS או שרת ייעודי

מנהל מארח אתרים (WHM) מפשט את תהליך עריכת קובץ התצורה של PHP על ידי מתן ממשק משתמש פשוט. כל שעליך לעשות הוא למצוא את הקטע “תצורת שירות” ב- WHM ולחץ על “עורך תצורת PHP”. בדף שמופיע, בחר “מצב מתקדם”.

עורך תצורת PHP

אם אינך משתמש בלוח בקרה כגון WHM, תצטרך לפתוח ולערוך ישירות php.ini. המיקום של php.ini ישתנה בהתאם למערכת ההפעלה של השרת שלך. מערכות Linux רבות ממקמות את הקובץ בנתיב “/etc/php.ini”. אתה יכול לאשר את מיקומו באמצעות שורת הפקודה. התחל על ידי כניסה לשרת באמצעות SSH (פנה לספק האירוח שלך לקבלת הוראות). לאחר חיבור, הזן את הפקודה “php –ini” ולחץ על Enter. חפש את השורה שהוחזרה תחת הכותרת “קובץ תצורה טעון” ושים לב לנתיב הקובץ php.ini.

אתה יכול לפתוח ולערוך php.ini באמצעות עורך טקסט שפועל בשורת הפקודה, כגון “ננו” עבור Linux. פשוט הקלד “nano /path/to/php.ini” ולחץ על Enter.
ננו עבור לינוקס

מבנה php.ini

בתוך php.ini כל הגדרה ממוקמת בשורה משלה בפורמט “namename = settingvalue”. כל שורה שמתחילה עם פסיק היא תגובה, אז אל תעדכן אף אחת מהשורות הללו.

ערוך את הגדרות התצורה

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

פרק 1: חיבורים מרחוק

allow_url_fopen = 0
allow_url_include = 0

אל תאפשר לעטיפות fopen לפתוח כתובות URL מרחוק. לא תמיד ניתן לסמוך על תוכן מרוחק; השבתת אפשרויות אלה מבטיחה כי עטיפות פופ יכולות לטעון רק תוכן מקומי.

פרק 2: הגדרות זמן ריצה

max_input_time = 30
max_execution_time = 30

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

memory_limit = 8M

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

register_globals = כבוי

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

expose_php = 0

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

cgi.force_redirect = 1

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

פרק 3: הגבלות על קלט נתונים

גודל post_max_size = 256,000
max_input_vars = 100

האקרים יכולים לנסות להציף משאבי יישומי אינטרנט על ידי שליחת נתונים המוניים אליהם, מה שיכול להפחית את מהירויות ההעברה ומשאבי השרת הזמינים. ניתן למזער את ההשפעה של התקפה מסוג זה על ידי הקטנת הגודל המרבי של נתוני POST, וגם על ידי הגבלת כמות נתוני הבקשה. שים לב ש” post_max_size “משפיע גם על הגודל המרבי של העלאת הקבצים; אם ליישום שלך יש יכולות העלאת קבצים, ודא שהערך של הגדרה זו גדול לפחות כמו “upload_max_filesize”.

פרק 4: טיפול בשגיאות

display_errors = 0
display_startup_errors = 0

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

log_errors = 1
error_log = / home / johndoe / error_log

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

פרק 5: הגבלת הגישה לקבצים

open_basedir = "/ home / johndoe / public_html"

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

open_basedir = "/ home / johndoe / public_html: / var / lib / php / tmp_upload: / var / lib / php / session"

פרק 6: העלאות קבצים

file_uploads = 0

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

file_uploads = 1
upload_max_filesize = 1 מיליון דולר

אם היישום שלך דורש יכולות העלאת קבצים, שמור את “upload_max_filesize” לכמה שיותר מערך הערך.

upload_tmp_dir = / var / lib / php / tmp_upload

כברירת מחדל, העלאות קבצים זמניות ממוקמות בספריה הניתנת לכתיבה על ידי כל משתמשי המערכת. יש להחליף את המיקום לספרייה מאובטחת יותר. ודא שמיקום הספריה החדש אינו נמצא בתוך שורש האינטרנט. אם אתה משתמש במנהל קבצים כמו זה הכלול ב- cPanel, מיקום קל ומאובטח ליצירת ספריית ההעלאה נמצא ישירות מחוץ לשורש האינטרנט (כלומר אותה ספרייה בה נמצא public_html). מיקום מאובטח נוסף הוא ליצור את הספרייה בתוך ספריית PHP ב- “/ var / lib”. הנתיב תלוי במערכת ההפעלה, כלומר “/ var / lib / php” או “/ var / lib / php5”. אם קיימות הגבלות על open_basisir, ודא שספריית ההעלאה הזמנית כלולה ברשימת ההיתרים של open_basedir..

פרק 7: אבטחת מושב

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

session.use_strict_mode = 1

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

session.cookie_httponly = 1

אפשר לעוגיית ההפעלה להיות נגישה רק מבקשת HTTP ולא ממקורות אחרים כמו JavaScript. זה עוזר במניעת התקף שנקרא התקפת XSS.

session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0

שמור את מזהה הפגישה בקובץ cookie, במקום לשלוח אותו כפרמטר URL. זה עוזר לשמור על הפעלה של משתמש מאובטח על ידי מניעת התקפות קיבוע של פעילויות באתר.

session.name = custom_session_id

קובצי Cookie מאחסנים את המידע שלהם בפורמט של ערך מפתח. רצוי לעדכן את שם מפתח ברירת המחדל של קובץ ה- cookie המאחסן את מזהה ההפעלה. עדכן את “custom_session_id” עם ערך מותאם אישית.

session.cookie_secure = 1

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

session.referer_check = example.com

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

session.save_path = "/ var / lib / php / session"

כל ברירת המחדל של נתיב שמירת קובץ ההפעלה ניתנת לכתיבה על ידי כל משתמשי המערכת. יש להחליף את המיקום לספרייה מאובטחת יותר. ודא שמיקום הספריה החדש אינו נמצא בתוך שורש האינטרנט. אם אתה משתמש במנהל קבצים כמו זה הכלול ב- cPanel, מיקום קל ליצירת ספריית ההפעלה נמצא ישירות מחוץ לשורש האינטרנט (כלומר אותה ספרייה בה נמצא public_html). מיקום מאובטח נוסף הוא ליצור את הספרייה בתוך ספריית PHP ב- “/ var / lib”. הנתיב תלוי במערכת ההפעלה, כלומר “/ var / lib / php” או “/ var / lib / php5”. אם קיימות מגבלות של open_basedir, ודא שנתיב שמירת ההפעלה כלול ברשימת ההיתרים של open_basedir..

session.hash_function = sha512

SHA-512 הוא אלגוריתם hashing מאובטח יותר ליצירת מזהי הפעלה בהשוואה לפונקציית ה- hash של MD5 המוגדרת כברירת מחדל. אלגוריתם זה זמין בגרסת 5.3 ומעלה של PHP. אם אתה מפעיל גרסה פחותה של PHP, השתמש במקום זאת באלגוריתם ה- Hash של SHA1. לשם כך, קבע את “session.hash_function = 1”.

session.bug_compat_42 = 0
session.bug_compat_warn = 0

השבתת הגדרות אלה תבטיח שלא ניתן לאתחל משתני הפעלה באופן גלובלי, מה שמשפר את האבטחה.

השבת פונקציות פגיעות

disable_functions = ini_set, php_uname, getmyuid, getmypid, passthru, דליפה, האזנה, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec, מערכת, highlight_file, source, show_source, fpaththru, virtual_pixid, posix_pose posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, POSIX, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo, popen, curl_exec, curl_multi_exec, parse_ini_file, allow_url_fopen, allow_url_incchchchown

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

מטמון סבון

soap.wsdl_cache_dir = / var / lib / php / soap_cache

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

הפעל מחדש את PHP

לאחר שתבצע שינויים בקובץ php.ini, תצטרך להפעיל מחדש את שרת האינטרנט. WHM מספק לחצן להפעלה מחדש של השרת לאחר עריכת הקובץ. אם אינך משתמש בלוח בקרה כגון WHM, תצטרך להפעיל מחדש את השרת שלך דרך שורת הפקודה. עבור אפאצ ‘י, הזן את הפקודה “sudo apachectl חינני” ולחץ על Enter.

סיכום

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

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map