در این مطلب نسبتاً مفصل قصد داریم که برخی از بهترین مهارتها در امنیت php آشنا شویم. با ما همراه باشید. ۱) دشمن خود را بشناسید. برنامههای مبتنی بر PHP با انواع مختلفی از حملات مواجه میشوند. برخی از مهمترین این حملات از قرار زیر خواهند بود: XSS- اسکریپتهای اشتراکی یک نقطه آسیبپذیر در...
1398/12/172075 بازدید
در این مطلب نسبتاً مفصل قصد داریم که برخی از بهترین مهارتها در امنیت php آشنا شویم. با ما همراه باشید.
۱) دشمن خود را بشناسید.
برنامههای مبتنی بر PHP با انواع مختلفی از حملات مواجه میشوند. برخی از مهمترین این حملات از قرار زیر خواهند بود:
XSS- اسکریپتهای اشتراکی یک نقطه آسیبپذیر در برنامههای php تحت وب محسوب میشوند. مهاجمان از این طریق میتوانند به اطلاعات کاربران دسترسی پیدا کنند. برای این منظور شما میتوانید سرور آپاچی را تنظیم کرده و کدهای php امنتری بنویسید.
نفوذ به SQL- این نقطه آسیبپذیر در لایه پایگاه داده یک برنامه مبتنی بر php است. وقتی ورودی کاربر به شکلی نادرست فیلتر شود، هر نوع عبارت SQL ممکن است توسط برنامه اجرا گردد. تنظیم سرور آپاچی و نوشتن کدهای امن میتواند برای جلوگیری از چنین حملاتی مؤثر باشد. یکی از روشهای رایج در این زمینه، چشمپوشی از پارامترها با استفاده از تابع mysql_real_escape_string() قبل از ارسال کوئری SQL است.
کلاهبرداری
ارسال فایل- چنین چیزی به بازدیدکنندگان شما امکان میدهد که فایلهایشان را درون سرور شما جای دهند. در نتیجه شما در معرض خطراتی مانند پاکشدن فایلها، حذف پایگاه داده، دریافت جزئیات کاربر و مواردی از این قبیل قرار میگیرید. شما میتوانید با استفاده از php یا نوشتن کد امن جلوی این کار را بگیرید. مثلاً با تأیید ورودی کاربر و مجوز دادن به نوع خاصی از فایلهای تصویری مانند png یا gif.
ورود به محتوای فایلهای محلی و ریموت. یک مهاجم میتواند فایلها را از یک سرور ریموت باز کند و هر نوع کد php را نیز به اجرا دربیاورد. در نتیجه، امکان ارسال و حذف فایل و نصب ابزارهای مخفی برایشان وجود خواهد داشت. برای جلوگیری از چنین حملاتی میتوانید تنظیمات امنیت php را بهگونهای انجام دهید که جلوی اجرای ریموت فایل را بگیرد.
eval() – ارزیابی تمام رشتهها به عنوان یک کد php. مهاجمان معمولاً از این طریق میخواهند کدها و ابزارهایشان را در سرور مخفی کنند. میتوانید در تنظیمات php، ابزار eval() را غیرفعال کنید.
حمله موجسواری یا CSRF- این حمله کاربر نهایی را مجبور میکند که در برنامهای که وارد شده، یک سری اقدامات ناخواسته انجام دهد. یک نفوذ موفقیتآمیز CSRF میتواند موجب از دسترفتن دادههای کاربر نهایی و کل عملکرد سیستم شود. اگر کاربر نهایی هدف دارای یک حساب کاربری مدیریتی باشد، چنین چیزی میتواند منجر به نابودی تمام برنامه تحت وب شود.
۲) پیدا کردن ماژولهای داخلی PHP
برای مشاهده ماژولهای داخلی کامپایلشده php فرمان زیر را تایپ کنید:
به منظور ارتقای امنیت php و عملکرد آن، توصیه میشود که از حداقل ماژولها استفاده کنید. به عنوان مثال، میتوانید ماژول sqlite3 را با حذف فایل تنظیمات یا تغییر نام یک فایل با نام /etc/php.d/sqlite3.ini، غیرفعال کنید. این کار بهوسیله فرمان زیر انجام میشود:
سایر ماژولهای داخلی تنها زمانی برداشته میشوند که یک نسخه خلاصهتر از PHP نصب کنید. امکان دریافت سورسکد php از php.net وجود دارد. در عین حال، شما میتوانید آن را با پشتیبانی از GD، fastcgi و MySQL کامپایل کنید:
برای این منظور باید ابزار expose_php را غیرفعال کنید. در نتیجه باید به سراغ ویرایش /etc/php.d/secutity.ini بروید و تنظیم زیر را در آن وارد کنید:
php
1expose_php=Off
وقتی expose_php فعال باشد، به تمام دنیا میفهماند که php بر روی سرور نصب شده است. از جمله اینکه در تیتر http نسخه php نشان داده میشود و لوگوی php نیز در معرض نمایش قرار میگیرد. در هنگام فعالبودن این ابزار میتوانید با استفاده از فرمان زیر به نسخه php دسترسی پیدا کنید:
همچنین توصیه میشود که با تنظیمات ServerTokens و ServerSignature در فایل httpd.conf، نسخه آپاچی و نسخه PHP 5/7 را در هنگام استفاده از Nginx مخفی کنید.
۴) حداقل کردن اجرای ماژولهای PHP
php از ویژگیای با عنوان «پسوند دینامیک» پشتیبانی میکند. به صورت پیشفرض، RHEL تمام پسوندهای ماژولهای موجود در دایرکتوری /etc/php.d/ را اجرا میکند. برای فعال یا غیرفعالکردن یک ماژول، تنها کافی است که فایل تنظیمات را در دایرکتوری /etc/php.d/ پیدا کنید ودر آن نام ماژول موردنظر را بیابید. این در حالی است که امکان تغییرنام یا حذف فایل تنظیمات ماژول نیز وجود خواهد داشت. برای اینکه به بهترین سطح از امنیت php برسید، باید تنها پسوندهایی را فعال کنید که برنامههای تحتوب شما به آنها نیاز دارند. به عنوان مثال، برای غیرفعالکردن پسوند gd، میتوانید از فرمانهای زیر کمک بگیرید:
php
1# cd /etc/php.d/23# mv gd.{ini,disable}45# /sbin/service httpd restart67برای فعالکردن ماژول php با عنوان gd داریم:89# mv gd.{disable,ini}1011# /sbin/service httpd restart
۵) ثبت تاریخچه تمام خطاهای php
برای ارتقای امنیت php، تمام پیغامهای خطای را در معرض بازدیدکنندگان سایت قرار ندهید. برای این منظور، فایل /etc/php.d/security.ini را ویرایش کرده و اصلاح زیر را در آن انجام دهید:
php
1display_errors=Off
همچنین حتماً تمام خطاهای php را در یک فایل ذخیره کنید:
فایل /etc/php.d/security.ini را ویرایش کرده و با انجام اصلاح زیر، جلوی ارسال فایل را به لحاظ امنیت php بگیرید:
php
1file_uploads=Off
اگر کاربران برنامه حتماً بایستی ارسال فایل داشته باشند، این ویژگی را با اِعمال محدودیت حجم فایل قابلقبول برای php فعال کنید:
php
1file_uploads=On23# user can only upload upto 1MB via php45upload_max_filesize=1M
۷) غیرفعالکردن اجرای کد به صورت ریموت
اگر ابزار allow_url_fopen فعال بادش، به توابع فایل php مانند file_get_contents() اجازه میدهد که دادهها را از فواصل دور مانند FTP یا وبسایت برداشت کنند.
برنامهنویسان معمولاً این موضوع را فراموش میکنند. در اکثر مواقع، فیلترینگ مناسب برای ورودی دادههای کاربران به این توابع ایجاد نمیشود. در نتیجه، کدگذاری آنها دچار آسیبپذیری میگردد. برای حل این مشکل، به سراغ ویرایش فایل /etc/php.d/security.ini بروید و اصلاح زیر را انجام دهید:
php
1allow_url_fopen=Off
همچنین پشنهاد میشود که به لحاظ امنیت php، ویژگی allow_url_include را نیز غیرفعال کنید:
php
1allow_url_include=Off
۸) فعالکردن حالت امن SQL
فایل /etc/php.d/security.ini را ویرایش کرده و اصلاح زیر را انجام دهید:
php
1sql.safe_mode=On
در صورتی که این ویژگی فعال باشد، mysql_connect() و mysql_pconnect() از هر متغیری که به آنها وارد میشود، صرفنظر میکنند. به خاطر داشته باشید که در این حالت ممکن است نیاز به تغییر بخشهای از کد باشد. در حالتی که sql.safe_mode فعال باشد، برنامههای ثالث و متنباز مانند وردپرس ممکن است کاملاً از کار بیفتند. همچنین غیرفعالکردن magic_quotes_gpc برای تمام نسخههای php 5.3.x توصیه میشود. در این نسخهها فیلترینگ ناشی از این ابزار چندان کارآیی ندارد و توابعی مانند mysql_escape_string() واکنش بهتری نشان میدهند.
php
1magic_quotes_gpc=Off
۹) کنترل ابعاد POST
از روش درخواست HTTP POST زمانی استفاده میشود که کلاینت (مرورگر یا کاربر) نیاز به ارسال داده وبسرور آپاچی داشته باشد. مثلا زمانی را درنظر بگیرید که یک فایل آپلود میشود و یا یک فرم تکمیلشده و ارسال میگردد. در این حالت، مهاجمان ممکن سعی کنند که با ارسال POST های حجیم، منابع سیستمتان را به پایان برسانند. برای جلوگیری از این موضوع، شما باید ابعاد POST را که php پردازش میکند، محدود کنید. برای این منظور، فایل /etc/php.d/security.ini را ویرایش کرده و تنظیم زیر را انجام دهید:
php
1; Set a realistic value here23post_max_size=1K
مقدار 1K حداکثر ابعاد قابلقبول برای برنامههای php را مشخص میکند. این تنظیم همچنین بر فایلهای ارسالی تأثیر میگذارد. برای ارسال فایلهای حجیم، این مقدار باید بزرگتر از upload_max_filesize باشد. همچنین پیشنهاد میشود که روشهای در دسترسی برای استفاده از وبسرور آپاچی را نیز محدود کنید. برای این منظور فایل httpd.conf را ویرایش کرده و تنظیم زیر را برای DocumentRoot /var/www/html انجام دهید:
php
1<directory /var/www/html>23<limitExcept GET POST>45Order allow,deny67</limitExcept>89## Add rest of the config goes here... ##1011</directory>
۱۰) کنترل منابع (کنترل حمله DoS)
امکان تنظیم زمان اجرا (به ثانیه) هر کدام از اسکریپتهای php وجود دارد. یکی دیگر از گزینههای پیشنهادی، تنظیم زمانی است که هر کدام از اسکریپتها برای دادههای درخواستی منتظر میمانند. همچنین تنظیم حداکثر حافظهای که یک اسکریپت مصرف میکند. برای این منظور، فایل /etc/php.d/security.ini را ویرایش کرده و اصلاحات زیر را انجام دهید:
php
1# set in seconds23max_execution_time = 3045max_input_time = 3067memory_limit = 40M
۱۱) نصب سیستم حفاظت پیشرفته Suhosin برای امنیت php
در صفحه توضیحات این پروژه میخوانیم:
Suhosin یک سیستم حفاظت پیشرفته برای نسخههای مختلف php است. طراحی این ابزار به منظور محافظت از سرورها و کاربران در برابر خطرات شناختهشده و شناختهنشده برنامهها و هسته php بوده است. Suhosin دارای دو بخش مجزاست که میتوانند به صورت جداگانه یا ترکیبی استفاده شوند. اولین بخش، یک بسته کوچک برای هسته php است که دارای برخی محافظتهای سطح پایین در برابر حملات موسوم به bufferoverflows است. بخش دوم یک افزونه قدرتمند امنیت php است که تمام جنبههای حفاظتی را به کار میگیرد.
۱۲) غیرفعالکردن توابع خطرناک PHP
php دارای مجموعه گستردهای از توابع است که که در صورتی که بهدرستی استفاده نشوند، میتوانند برای نفوذ به سرور به کار گرفته شوند. در عین حال، شما میتوانید یک از سری از توابع را در /etc/php.d/security.ini تنظیم کنید. این کار با استفاده از مقداردهی به disable_functions صورت میگیرد:
php با FastCGI کار می کند. Fascgi موجب میشود که میزان استفاده از حافظه وبسرور شما کاهش پیدا کند. در همین حال، شما هنوز هم قدرت و سرعت زبان php را در اختیار خواهید داشت. شما میتوانید تنظیمات Apache2+PHP+FastCGI یا cgi را به شرح زیر انجام دهید. مشخصه تنظیمی cgi.force_redirect از هرگونه فراخوانی مستقیم از طریق آدرس اینترنتی جلوگیری میکند. در نتیجه، باید بنابر ملاحظات امنیتی، cgi.force_redirect را فعال کنید. برای این منظور، فایل /etc/php.d/security.ini را ویرایش کرده و اصلاح زیر را انجام دهید:
php
1; Enable cgi.force_redirect for security reasons in a typical *Apache+PHP-CGI/FastCGI* setup23cgi.force_redirect=On
۱۴) شناسه کاربر و گروه php
mod_fastcgi یک ماژول cgi برای وبسرور آپاچی است و میتواند به سرور خارجی FastCGI متصل شود. در این حالت، شما باید مطمئن شوید که php به صورت یک کاربر غیر روت کار میکند. اگر php به عنوان یک کاربر روت یا یک کاربر با شناسه زیر ۱۰۰ کار کند، ممکن است به فایلهای سیستمی دسترسی پیدا کرده و آنها را دستکاری کند. در نتیجه، باید با استفاده از mod_suPHP یا suEXEC در آپاچی، PHP CGIها را به صورت کاربرانی بدون امتیازات ویژه اجرا کنید. ابزار suEXEC امکانی را برای کاربران آپاچی فراهم میکند که برنامههای CGI را تحت شناسههای مختلف از کاربران وبسرور اجرا کنند. در این مثال، php-cgi به عنوان کاربر phpcgi اجرا شده و آپاچی به عنوان کاربر apache اجرا میشود:
در عین حال، میتوانید از ابزارهایی مانند spawn-fcgi برای ردیابی فرآیندهای ریموت و محلی FastCGI به عنوان کاربر phpcgi استفاده کنید. البته باید ابتدا کاربر phpcgi را به سیستم اضافه کنید:
حالا میتوانید آپاچی، Lighttpd و Nginx را بهگونهای تنظیم کنید که از php FastCGI خارجی در پورت ۹۰۰۰ در آدرس 127.0.0.1 استفاده کنند.
۱۵) محدودیت دسترسی php به فایلهای سیستمی
open_basedir تنظیمکننده دایرکتوریهایی است که php اجازه دسترسی به آنها را با استفاده از توابعی مانند fopen() خواهد داشت. اگر فایلی خارج از محدوده تعریفشده open_basdir باشد، php از باز کردن آن خودداری خواهد کرد. در همین حال، نمیتوانید از یک آدرس سمبلیک استفاده کنید. به عنوان مثال، اگر دسترسی به /var/www/html وجود داشته باشد، نمیتوان به دایرکتوری /var/www یا /tmp ارجاع داد.
php
1; Limits the PHP process from accessing files outside23; of specifically designated directories such as /var/www/html/45open_basedir="/var/www/html/"67; ------------------------------------89; Multiple dirs example1011; open_basedir="/home/httpd/vhost/cyberciti.biz/html/:/home/httpd/vhost/nixcraft.com/html/:/home/httpd/vhost/theos.in/html/"1213; ------------------------------------
۱۶) مسیر Session
پشتیبانی از Session در php عبارتست از راهی برای حفظ دادههای خاص در دسترسیهایی که برایشان اتفاق میافتد. چنین چیزی به شما کمک میکند که برنامههایی سفارشیتر تولید کنید و سطح ظاهری وبسایتتان را ارتقا دهید. این مسیر در فایل /etc/php.ini تعریف شده و تمام دادههای مربوط به یک session خاص در دایرکتوریای که session.save_path تعیین میکند، ذخیره می شوند. حالت پیشفرض در لینوکسهای RHEL/CentOS/Fedora به صورت زیر خواهد بود:
php
1session.save_path="/var/lib/php/session"23; Set the temporary directory used for storing files when doing file upload45upload_tmp_dir="/var/lib/php/session"
حتماً دقت کنید که مسیر خارج از /var/www/html باشد و هیچکدام از کاربران دیگر سیستم نتوانند آن را بخوانند یا ویرایش کنند.
نکته: گزینه –Z در فرمان ls نشاندهنده حالت امنیتی SELinux از جمله وضعیت فایل، کاربر، گروه، محتوای امنیتی و عنوان فایل خواهد بود.
۱۷) بهروز نگهداشتن php، نرمافزار و سیستمعامل
اضافهکردن بستههای امنیتی یکی از بخشهای مهم حفظ و نگهداری سرورهای لینوکس، آپاچی، php و MySQL است. تمام آپدیتهای امنیت php بایستی مورد ارزیابی قرار گرفته و با کمک فرمان زیر، در کمترین زمان ممکن اِعمال شوند:
php
1# yum update
و یا:
php
1# apt-get update && apt-get upgrade
ضمن اینکه میتوانید لینوکسهای Red hat / CentOS / Fedora را بهگونهای تنظیم کنید که آپدیتهای بسته yum را به ایمیلتان ارسال کنند. گزینه دیگر نصب تمام آپدیتهای امنیتی با cron job است. در توزیعهای لینوکس دبیان و اوبونتو، میتوانید از ابزار apticron نیز برای ارسال هشدارهای امنیتی استفاده کنید.
۱۸) محدود کردن دسترسی به فایل و دایرکتوری
حتماً دقت کنید که آپاچی را به صورت یک کاربر غیر روت مانند Apache یا www راهاندازی کنید. تمام فایلها و دایرکتوریها میبایست در مالکیت کاربر غیر روت تحت آدرس /var/www/html باشند:
php
1# chown -R apache:apache /var/www/html/
/var/www/html/ یک سابدایرکتوری است و امکان ثبت تغییرات در DocumentRoot توس سایر کاربران وجود دارد. از آنجایی که کاربر روت هیچگونه فایلی خارج از آن اجرا نمیکند و نباید هم فایل در آنجا ایجاد کرد.
بنابراین حتماً دقت کنید که مجوز فایلها در /var/www/html/ به صورت فقط خواندنی و با کد 0444 باشند.
php
1# chmod -R 0444 /var/www/html/
همچنین تمام مجوزهای دایرکتوریهای تحت /var/www/html/ را به صورت 0444 تنظیم کنید:
فرمانهای chown و chmod باعث میشود که تحت هیچ شرایطی DocumentRoot یا فایلهای موجود در آن بوسیله کاربر وبسرور آپاچی قابلتغییر نباشند. به خاطر داشته باشید که مجوزها را باید بر اساس مدل توسعه وبسایت خود تنظیم کنید. بنابراین باید در استفاده از فرمانهای chown و chmod به خود آزادی عمل بدهید. در مثال زیر، وبسرور آپاچی به صورت کاربر apache اجرا شده است. چنین چیزی با استفاده از تنظیم User و Group در فایل httpd.conf انجام میشود. کاربر apache باید به خواندن تمام فایلهای موجود DocumentRoot دسترسی داشته باشد، امّا لزوماً نباید بتواند همه آنها را ویرایش کند.
بر این اساس، حتماً دقت کنید که فایل httpd.conf حاوی تنظیمات زیر باشد:
شما بایستی تنها در صورت نیاز، دسترسی ایجاد کنید. برخی برنامههای تحتوب مانند وردپرس ممکن است نیاز به یک دایرکتوری ذخیره یا caching داشته باشند. امکان ایجاد دسترسی به این دایرکتوری ذخیره، با استفاده فرمان زیر وجود خواهد داشت:
php
1# chmod a+w /var/www/html/blog/wp-content/cache23### block access to all ###45# echo 'deny from all' > /var/www/html/blog/wp-content/cache/.htaccess
۱۹) حفاظت از ویرایش فایلهای تنظیمات آپاچی، php و MySQL
به منظور حفاظت از ویرایش فایلهای تنظیمات از فرمان chattr استفاده کنید:
۲۰) استفاده از افزونههای امنیتی لینوکس مانند SELinux
برخی بستههای امنیتی در لینوکس میتوانند از شما در مقابل تنظیمات نامناسب و یا برنامههای سرور مخرب محافظت کنند. ابزار امنیتی SELinux و دیگر افزونههای لینوکس برای ایجاد محدودیت بر شبکه و دیگر برنامهها توصیه میشوند. SELinux مجموعه امنیتی متنوعی را برای کرنل لینوکس و وبسرور آپاچی ارائه میکند که در مطالب قبلی به آن اشاره شد. برای تهیه لیست از تمام متغیر امنیتی آپاچی SELinux فرمان زیر را تایپ کنید:
ModSecurity یک ابزار متنباز تشخیص و جلوگیری از نفوذ برای برنامههای تحتوب است. شما میتوانید بهراحتی این ابزار را در لینوکس نصب کرده و برنامههای مبتنی بر php را در برابر حملات xss و ... محافظت کنید.
php
1## A few Examples ##23# Do not allow to open files in /etc/45SecFilter /etc/67# Stop SQL injection89SecFilter "delete[[:space:]]+from"1011SecFilter "select.+from"
۲۲) در صورت امکان آپاچی /PHP را در یک فضا ایزوله اجرا کنید.
قرار دادن php و یا آپاچی در یک فضای ایزوله و در یک بخش کوچک از فایلهای سیستمی، ریسک ناشی از خطرات احتمالی را به حداقل میرساند. امکان استفاده از تنظیمات ایزوله معمولی در آپاچی وجود دارد. FreeBSD jails، شبیهسازی XEN و OpenVZ، همگی میتوانند ابزاری برای این منظور باشند.
۲۳) استفاده از فایروال برای محدود کردن ارتباطات خروجی
مهاجم میتواند با استفاده از ابزارهایی مانند wget، فایلها را بر روی وبسرور شما دریافت کند. در عین حال، شما میتوانید از iptable ها برای بلوکهکردن ارتباطات خروجی از کاربر apache استفاده کنید. ماژول ipt_owner سعی میکند که مشخصههای مختلف یک بسته داخلی را با سازنده آن تطبیق دهد. این ماژول تنها در زنجیره OUTPUT یافت میشود. در این مثال، به کاربر vivek اجازه داده میشود که با استفاده از پورت ۸۰، ارتباط خروجی داشته باشد؛ موضوعی که برای دسترسی RHN یا دریافت بروزرسانیهای CentOS مفید خواهد بود.
php
1/sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
در اینجا مثال دیگری را داریم که تمام ارتباطات خروجی کاربر آپاچی را به جز ارتباطی که با سرور smtp و سرویس API تشخیص اسپم دارد، بلوکه میکند:
php
1# ....23/sbin/iptables --new-chain apache_user45/sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT67/sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user89# allow apache user to connec to our smtp server1011/sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN1213# Allow apache user to connec to api server for spam validation1415/sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.62 --dport 80 -j RETURN1617/sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.61 --dport 80 -j RETURN1819/sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.89 --dport 80 -j RETURN2021/sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.88 --dport 80 -j RETURN2223#########################2425## Add more rules here ##2627#########################2829# No editing below3031# Drop everything for apache outgoing connection3233/sbin/iptables --append apache_user -j REJECT
۲۴) بررسی تاریخچه عملکرد و حسابرسی سرور
فایل تاریخچه عملکرد apache را بررسی کنید. برای این منظور میتوانید از فرمانهای grep و egrep کمک بگیرید:
مشاهده فایل تاریخچه عملکرد یکی از روشهای مناسب در ارزیابی امنیت php است. در این فایل شما درک بسیار خوبی از حملات به سرور پیدا میکنید و تشخیص میدهید که چه سطح امنیتی برایتان موردنیاز است. ضمن اینکه سرویس auditd برای حسابرسی سیستم ارائه شده است. این سرویس را میتوانید برای اهدافی مانند اتفاقات مرتبط با SELinux، تأیید دسترسی، اصلاح فایلها و حسابهای کاربری استفاده کنید. همچنین استفاده از ابزار استاندارد موسوم به “Linux System Monitoring Tools” برای پایش وبسرور به شما توصیه میشود.
۲۵) راهاندازی سرویس برای هر سیستم یا VM
برای پروژههای بزرگ، پیشنهاد میشود که پایگاه داده، محتوای استاتیک و دینامیک از سرورهای مختلف اجرا کنید.
سرویسهای شبکه مختلف را در سرورها یا VM های جداگانه راهاندازی کنید. چنین کاری میتواند تعداد خدمات دیگری را که ممکن است تحتالشعاع قرار گیرند، کاهش دهد. به عنوان مثال، اگر یک مهاجم بتواند به یک نرمافزار مانند Apache flow نفوذ کند، ممکن است بتواند به تمام سرویسهای دیگر وجود در سرور مانند MySQL و ایمیل دسترسی پیدا کند. در مثال بالا، سرورها به صورت زیر تعریف شدهاند:
static.lan.ariaservice.net –استفاده از سرور لایتتیپیدی یا انجینیکس برای ابزارهای استاتیک مانند تصاویر، جیاس و سیاساس.
phpcgi1.lan. ariaservice.net and phpcgi2.lan. ariaservice.net –وبسرور آپاچی همراه با پیاچپی برای تولید محتوای دینامیک
mysql1.lan. ariaservice.net – سرور پایگاه داده مایاسکیوال
mcache1.lan. ariaservice.net –
سرور Memcached یک سیستم ذخیره بسیار سریع برای MySQL محسوب میشود. این سرور از ابزار libevent یا epoll برای پوشش هر تعداد از ارتباطهای باز استفاده میکند و از شبکه بدون قطعی I/O بهره میبرد.
LB01 – وبسرور انجینیکس یا ریورس پروکسی در جلوی وبسرورهای آپاچی. تمام ارتباطات اینترنتی ورودی به هر کدام از وبسرورها به سرور پروکسی انجینیکس هدایت میشوند. این سرور یا خودش به درخواست رسیدگی میکند و یا بخشی از آن را به وبسرورهای اصلی انتقال میدهد.
۲۶) ابزارهای اضافی
PHPIDS
در صفحه پروژه میخوانیم:
سیستم تشخیص نفوذ php یا PHPIDS یک ابزار ساده، سریع و با ساختار متناسب است. این ابزار از آخرین تکنولوژیهای امنیتی برای برنامههای وب مبتنی بر php بهره میبرد. سیستم ISD چیزی را حذف یا فیلتر نمیکند. بلکه به شکلی ساده، حمله مهاجمین را تشخیص داده و اقدام دلخواه شما را انجام میدهد.
PhpSecInfo
در صفحه پروژه میخوانیم:
PhpSecInfo معادلی برای تابع phpinfo() محسوب میشود که گزارش از وضعیت امنیتی php در اختیار قرار میدهد. ضمن اینکه پیشنهادهایی در ارتباط با بهبود فضا ارائه میکند. البته این ابزار جایگزینی برای تکنیکهای توسعه امنیتی نخواهد بود. ولی در عین حال، میتواند در رویکردهای امنیتی چندلایه مفید واقع شود.
اطلاعات امنیتی در مورد برنامه مبتنی بر php
نکاتی در مورد درهای مخفی php
شاید تا به حال اسکریپتهای ورودی مخفی php مانند c99، c99madshell و r57 به گوشتان خورده باشد. یک اسکریپت در مخفی php عبارتست از یک اسکریپت مخفی برای دور زدن تمام مجوزهای ورودی و دسترسی به سرور. این نوع اسکریپت توسط مهاجمان بر روی سرور شما نصب میشود تا آنها پس از وارد شدن، همچنان به صورت ناشناس باقی بمانند. معمولاً اسکریپتهای php یا اسکریپتهای دیگر CGI اشتباهاً موجب آسیبپذیری از طریق مرورگرهای وب میشوند. یک مهاجم میتواند با ارسال این درهای ورودی مخفی به سرور شما، امکانات مختلفی برای خود فراهم کند؛ از جمله موارد زیر:
دریافت فایل
ارسال فایل
نصب روتکیتها
تنظیم سرورهای ایمیل اسپم
تنظیم یک سرور پروکسی برای مخفیکردن رهگیریها
بهدست گرفتن کنترل سرور
سرقت تمام اطلاعات
حذف تمام اطلاعات و پایگاه داده
باز کردن پورتهای TCP و UDP
چگونه درهای مخفی php را جستجو کنیم؟
میتوانید از فرمان grep در لینوکس یا یونیکس برای جستجو بسته c99 یا r57 استفاده کنید. برای این منظور داریم:
اگر مطلب بالا در مورد امنیت php را به صورت کامل مرور کرده باشید، احتمالاً هماکنون امنیت سرورتان که مبتنی بر php است، ارتقا یافته است. با این وجود، هنوز هم ممکن نقاط آسیبپذیری در سیستم شما باشند. برای برطرفکردن این نقاط لازم است که از مراجع و منابع مختلف، مشورتهای لازم را بگیرید.