امنیت PHP بدلیل استفاده بسیار گسترده در سرورهای اینترنتی مقوله چالش بر انگیز و مهمی است که میتوان آن را با تنظیمات ساده تا حد زیادی تامین کرد.
پیشتر در مطلب آشنایی با اصطلاحات هک و امنیت با ضروری ترین اصطلاحات و حملات هکری آشنا شدیم. برای استفاده حداکثری از این آموزش حتما این مطلب را بخواهید.
قطعا مهم ترین کاری که میتوان برای افزایش بهره وری و امنیت سرورهای حاوی PHP انجام داد بروز رسانی مستمر به نسخههای پایدار است.
مدیران سرور بهانههای بسیاری برای بروز رسانی نکردن سرورهای خود میآورند که غالبا غیر موجه هستند.
بالابردن امنیت PHP با php.ini
تمامی پیکربندی های PHP را میتوان در این فایل انجام داد. برخی از مهم ترین پیکربندیهای این فایل عبارتند از:
- موقعیت ذخیره سازی Cache ها
- ذخیره سازی Log ها
- محدودیتهای دسترسی
- ذخیره موقعیت زمانی در php
- ذخیره و تنظیم موارد مرتبط با آپلود اطلاعات
- فعال سازی تمام یا بخشی از کتابخانههای موجود در php و غیر فعال کردن بخشی از آن ها
- و ...
در پایین به صورت خلاصه قصد داریم مهم ترین تنظیمات این فایل را به شما آموزش دهیم:
فعال سازی safe mode در php.ini برای افزایش حداکثری امنیت
قابلیت safe_mode قابلیتی بسیار مهم است که منجر به افزایش امنیت PHP میشود. این قابلیت وظیفه جلوگیری اجرای کدهای مخرب که به آنها شل گفته میشود را دارد.
گاهی ممکن است هکرها بتوانند تا حدودی به سایت یا سرور شما نفوذ کنند که برای تکمیل فرایند نفوذ خود نیازمند افزایش دسترسی دارند که در این موارد معمولا از شلها بهره میگیرند.
اگر از سرور اختصاصی استفاده میکنید حتما این قابلیت را فعال کنید ولی اگر سروری استفاده میکنید که در آن سایتهای زیادی وجود دارد، این احتمال وجود دارد که سایتها با مشکل مواجه شوند. بنابر این تنها برخی از قابلیت های safe_mode را غیر فعال میکنیم:
sql.safe_mode = On
البته برای تکمیل امنیت باید قابلیت magic_quotes_gpc را نیز غیر فعال کنیم تا نفوذگر نتواند از علامتهای نقل قول برای فرایند نفوذ خود استفاده کند:
magic_quotes_gpc = Off
محدود سازی منابع و دسترسیها در PHP
تنظیمات زیر را ببینید:
max_execution_time = 60
max_input_time = 60
memory_limit = 90M
post_max_size = 16K
در بالا همانطور که میبنید برای چهار فاکتور مهم محدودیت اعمال کردیم.
max_execution_time: حداکثر زمان اجرای فرمانها است.
max_input_time: حداکثر زمان ارسال اطلاعات.
memory_limit: حداکثر میزان استفاده از رم.
post_max_size: حداکثر سایز داده با متد post.
بستن قابلیت Upload و ورژن PHP
با دستور زیر قابلیت Upload را میبندید تا متجاوزان نتوانند چیزی را Upload کنند:
file_uploads = Off
مهم ترین کاری که یک هکر میکند آپلود فایلهای مخرب روی سرور شماست.
بستن قابلیت مشاهده ورژن PHP:
expose_php = Off
اهمیت بسیاری دارد که هکرها نفهمند چه نسخهای از PHP روی سرور شما نصب است. گاهی هکرها با اطلاع از نسخه php و جستجو در باگهای آن میتوانند به سرور شما نفوذ کنند.
غیر فعال کردن فانکشنها و کتابخانههای غیر ضروری برای امنیت بیشتر
PHP توابع بسیاری دارد که برخی بسیار ضروری هستند ولی قسمتی از این توابع نیز کاربرد چندانی ندارند و باید آنها را غیر فعال کرد، چون این توابع ممکن است باعث تسهیل فرایند نفوذ شوند.
در زیر لیستی از این توابع را غیر فعال میکنیم:
disable_functions = symlink,curl_setopt,curl_exec,curl_init,fpassthru,crack_check,crack_closedict,crack_getlastmessage,crack_opendict,psockopen,php_ini_scanned_files,shell-exec,system,dl,ctrl_dir,phpini,tmp,safe_mode,systemroot,server_software,get_current_user,HTTP_HOST,ini_restore,popen,pclose,exec,shell_exec,suExec,passthru,proc_open,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,escapeshellcmd,escapeshellarg,posix_ctermid,posix_getcwd,posix_getegid,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_setegid,posix_seteuid,posix_setgid,posix_times,posix_ttyname,posix_uname,posix_access,posix_get_last_error,posix_mknod,posix_strerror,posix_initgroups,posix_setsid,posix_setuid,perl,rsync,wget,./,python,touch,whoami,cat,perm,find,phpinfo,php_uname
برخی از توابع فوق باعث اجرای شلهای خطرناک و یا باعث ایجاد symlink در سرور میشوند.