اقدامات امنیتی مناسب در PHP | قسمت سوم

۱۱.محل ذخیره ی اطلاعات اقدامات امنیتی | قسمت سوم
پشتیبانی session در PHP در حقیقت محلی است که اطلاعات خاص برای دسترسی های بعدی در آن ذخیره می شوند. استفاده از این پشتیبان شما را قادر می سازد که برنامه ی کارآمد تری بسازید و سایت خود را جذاب تر کنید. این مسیر در فایل /etc/php.ini تعریف شده و تمام اطلاعات مربوط به یک session خاص در فایلی در یک دایرکتوری که با گزینه ی session.save_path مشخص شده است ، ذخیره می شود. مطابق شرح زیر ، دایرکتوری پیش فرض ، زیر مجموعه ی RHEL/CentOS/Fedora Linux است :

session.save_path=“/var/lib/php/session”

; Set the temporary directory used for storing files when doing file upload

upload_tmp_dir=“/var/lib/php/session”

مطمئن شوید که این مسیر در خارج از /var/www/html قرار دارد و دیگر کاربران سیستم امکان خواندن یا نوشتن در آن را ندارند:

# ls -Z /var/lib/php/

نمونه ی خروجی

drwxrwx—. root apache system_u:object_r:httpd_var_run_t:s0 session

نکته: گزینه ی –Z در دستور ۱s علامت موارد امنیتی SELinux از قبیل file mode ، نام کاربر ، نام گروه ، موارد امنیتی و نام فایل هست.

  1. PHP ، OS و نرم افزار را به روز نگه دارید

استفاده از برنامه های الحاقی امنیتی یک بخش مهم از حفظ و نگهداری سرورهای Linux, Apache, PHP و MySQL محسوب می شود. تمام موارد امنیتی PHP باید مرتب چک شده و در اولین فرصت ممکن با استفاده از یکی از ابزارهای زیر به روز رسانی شود( اگر PHP را از طریق پکیج نصب کرده اید ):

# yum update

 

یا

# apt-get update && apt-get upgrade

با پیکربندی Red hat / CentOS / Fedora Linux می توانید تنظیمات را به گونه ای انجام دهید که هشدار به روزرسانی yum package از طریق ایمیل برای شما ارسال شود. راه دیگر برای به روز رسانی PHP استفاده از گزینه ی apply all security updates از طریق cron job است. در سرورهای لینوکس Debian / Ubuntu می توان از گزینه ی use apticron to send security برای ارسال هشدار به روز رسانی استفاده کرد.

نکته: برای اطلاع از آخرین کدهای نصب منابع مورد استفاده php.net را چک کنید.

  1. ۱۳٫دسترسی به فایلها و دایرکتوری ها را محدود کنید

مطمئن شوید که Apache را به عنوان یک کاربر عادی مثل Apache یا www اجرا می کنید. تمامی فایلها و دایرکتوری ها باید در زیر مجموعه ی /var/www/html متعلق به یک کاربر عادی ( مثلاً کاربر Apache) قرار داشته باشند:

# chown -R apache:apache /var/www/html/

 

/var/www/html/ یک ساب دایرکتوری و یک documentroot است که سایر کاربران می توانند آن را تغییر داده و اصلاح کنند، زیرا که هیچ فایلی خارج از root اجرا نمی شود و نباید در داخل root فایل جدیدی ایجاد شود. اقدامات امنیتی | قسمت سوم

مطمئن شوید که اجازه ی دسترسی به فایلها به صورت ( فقط خواندنی ) ۰۴۴۴ و در زیر مجموعه ی /var/www/html/ تنظیم شده است:

# chmod -R 0444 /var/www/html/

مطمئن شوید که اجازه ی دسترسی به دایرکتوری ها به صورت ۰۴۴۵ و در زیر مجموعه ی /var/www/html/ تنظیم شده است:

# find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {}

یک نکته درباره ی تنظیم صحیح اجازه ی دسترسی به فایل ها

فرمانهای chown و chmod این اطمینان را ایجاد می کنند که کاربران Apache سرور تحت هیچ شرایطی نمی توانند بر روی documentroot و یا فایلهای داخل آن چیزی بنویسند. لطفاً توجه داشته باشید که لازم است شما مجوزهایی داشته باشید که باعث بهتر شدن وضعیت سایت شما شوند، بنابراین هر جا که ضروری دانستید، می توانید chown و chmod را تغییر دهید. در این مثال سرور مجازی Apache به عنوان کاربر Apache عمل می کند. می توانید این دستورالعمل را هم به عنوان دستور برای کاربر و هم به عنوان دستور برای گروه در فایل httpd.conf خود وارد کنید. کاربر Apache برای خواندن باید به تمامی فایلها ی زیر مجموعه ی Documentroot دسترسی داشته باشد، اما نباید امکان نوشتن در این فایلها را داشته باشد.

برای پیکربندی محدودیت کننده از وجود دستورالعملهای زیر در httpd.conf مطمئن شوید:

<directory / >

   Options None

   AllowOverride None

   Order allow,deny

</directory>

شما باید تنها در موارد ضروری اجازه ی دسترسی برای نوشتن را بدهید. بعضی از برنامه ها از قبیل WordPress به یک دایرکتوری caching احتیاج دارند. شما می توانید با استفاده از فرمان زیر به دایرکتوری caching اجازه ی دسترسی برای نوشتن بدهید:

# chmod a+w /var/www/html/blog/wp-content/cache
### block access to all ###
# echo ‘deny from all’ > /var/www/html/blog/wp-content/cache/.htaccess

  1. ۱۴.فایلهای پیکربندی محافظتی   برای Apache, PHP و MySQL بنویسید

از دستور chattr برای نوشتن فایلهای پیکربندی محافظتی استفاده کنید:

# chattr +i /etc/php.ini
# chattr +i /etc/php.d/*
# chattr +i /etc/my.ini
# chattr +i /etc/httpd/conf/httpd.conf
# chattr +i /etc/

با فرمان chattr می توانید فایل یا فایلهای PHP محافظتی هم در دایرکتوری /var/www/html بنویسید: اقدامات امنیتی | قسمت سوم

# chattr +i /var/www/html/file1.php
# chattr +i /var/www/html/

  1. ۱۵.از فایلهای ضمیمه ای امنیتی Linux ( مانند SLinux ) استفاده کنید

Linux فایلهای پیوست امنیتی مختلفی دارد که می توانند برای مقابله با سرورها و برنامه های مخرب مورد استفاده قرار بگبرند. در صورت امکان برای ایجاد محدودیت در شبکه و سایر برنامه ها از SELinux یا سایر برنامه های مشابه آن استفاده کنید. مثلاً SELinux سیاستهای امنیتی مختلفی را برای       هسته ی لینوکس و سرور Apache فراهم می کند. برای مشاهده ی لیست انواع حفاظتهای Apache SELinux دستور زیر را وارد کنید :

# getsebool -a | grep httpd

نمونه ی خروجی :

allow_httpd_anon_write –> off

allow_httpd_mod_auth_ntlm_winbind –> off

allow_httpd_mod_auth_pam –> off

allow_httpd_sys_script_anon_write –> off

httpd_builtin_scripting –> on

httpd_can_check_spam –> off

httpd_can_network_connect –> off

httpd_can_network_connect_cobbler –> off

httpd_can_network_connect_db –> off

httpd_can_network_memcache –> off

httpd_can_network_relay –> off

httpd_can_sendmail –> off

httpd_dbus_avahi –> on

httpd_enable_cgi –> on

httpd_enable_ftp_server –> off

httpd_enable_homedirs –> off

httpd_execmem –> off

httpd_read_user_content –> off

httpd_setrlimit –> off

httpd_ssi_exec –> off

httpd_tmp_exec –> off

httpd_tty_comm –> on

httpd_unified –> on

httpd_use_cifs –> off

httpd_use_gpg –> off

httpd_use_nfs –> off

برای غیرفعال کردن محافظت Apache cgi دستور زیر را وارد کنید: اقدامات امنیتی | قسمت سوم

# setsebool -P httpd_enable_cgi off

  1. ۱۶.Mod-security را نصب کنید.

Mod-security در حقیقت یک موتور open source برای شناسایی حملات و پیشگیری از آنها برای برنامه های تحت وب است. به آسانی می توانید Mod-security را در Linux ، Apache و PHP برای مقابله با حملات XXS و یا سایر انواع حملات نصب کنید:

## A few Examples ##

# Do not allow to open files in /etc/

SecFilter /etc/

# Stop SQL injection

SecFilter “delete[[:space:]]+from”

SecFilter “select.+from”

نظر

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *