جدا سازی php برای وب سایت های مختلف جهت بهبود امنیت سرور

در صورتی که شما دوست دارید سرور مجازی و سرور اختصاصی خود را مدیریت کنید متن زیر می تواند به شما در تنظیمات php کمک کند. لازم به ذکر است این تنظیمات مربوط به سرور های مجازی و یا سرور اختصاصی می باشد که سیستم عامل ویندوز برروی آنها نصب است.

به طور خاص توصیه می شود php برای هاست های اشتراکی جهت استفاده از iis به منظور بالا بردن امنیت سایت ها جداسازی شود و توصیه های زیر در نظر گرفته شود.

  • برای هر وب سایت به صورت جداگانه از Application Pool استفاده شود.
  • از یک حساب کاربری اختصاصی برای شناسایی Application Pool استفاده کنید.
  • تنظیمات، کاربر ناشناس را جهت شناسایی کاربر Application Pool انجام دهید.
  • اطمینان حاصل کنید که impersonation در fastCGI در فایل ini فعال است.

(fastcgi.impersonate=1)

فرایند Recycling در پرسه های php:

اطمینان حاصل کنید FastCGI همیشه پردازش های php-Cgi.exe را قبل از فرایند Recycling در پرسه های php انجام می دهد.

عملکرد FastCGI process recycling توسط instanceMaxRequests در تنظیمات کنترل خواهد شد. این ویژگی مشخص می کند که چگونه بسیاری از خواسته های FastCGI process  قبل از recycling پردازش می شوند.

Php همچنین قابلیت پردازشی مشابهی دارد که توسط متغیر  PHP_FCGI_MAX_REQUESTS کنترل می شوند.

برای اطمینان از عملکرد  recycling در پرسه های php بهتر است مقدار instanceMaxRequests را بر روی مقداری برابر یا کمتر از PHP_FCGI_MAX_REQUESTS تنظیم کنید.

تنظیمات fastCGI را می توانید توسط iis manager یا خط فرمان  انجام دهید.

انجام تنظیمات FastCGI recycling settings با استفاده از iis manager :

اطمینان حاصل کنید Administration Pack for IIS بر روی سرور نصب است. حال Open IIS Manager را باز کنید و در سطح سرور بر روی FastCGI Setting   دابل کلیک کنید.

FastCGI Application ی را که می خواهید پیکربندی کنید انتخاب نمایید در قیمت Actions بر روی edit کلیک کنید.

در کادر محاوره Edit FastCGI Appliction مقدار InstanceMaxRequests را برروی 10000 تنظیم و سپس بر روی دکمه … مقابل EnvironmentVariables کلیک نمایید .

در کادر محاوره EnvironmentVariables مقدار PHP_FCGI_MAX_REQUESTS را اضافه نمایید و مقدار آن را روی 10000 تنظیم کنید.

پیکربندی تنظیمات FastCGI Recycling توسط خط فرمان cmd :

برای انجام تنظیمات توسط خط فرمان می توانید دستورات زیر را وارد نمایید.

C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath=’c:\{php_folder}\php-cgi.exe’].instanceMaxRequests:10000

C:\>%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+”[fullPath=’C:\{php_folder}\php-cgi.exe’].environmentVariables.[name=’PHP_FCGI_MAX_REQUESTS’,value=’10000′]”

نسخه php :

بسیاری از برنامه های php  با توابع یا ویژگی هایی که در نسخه خاصی از php در دسترس هستند کار می کنند. برای استفاده از این برنامه باید بر روی سرور میزبانی شونده، نسخه های مختلف php فعال و در کنار هم اجرا شوند.

به عنوان مثال: فرض کنید در وب سرور شما قصد دارید روی پلن های PHP 4.4.8, PHP 5.2.1, PHP 5.2.5 از non-thread safe  پشتیبانی کنید.

برای فعال کردن این تنظیمات شما باید فایل های مربوط را در مسیر ها زیر قرار دهید.

C:\php448\

C:\php521\

C:\php525nts

 

و پس FastCGI application process pools  را برای هر یک از ورژن ها مانند زیر ایجاد کنید.

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath=’c:\php448\php.exe’]

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath=’c:\php521\php-cgi.exe’]

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath=’c:\php525nts\php-cgi.exe’]

 

اگر شما سه وب سایت دارید (site1, site2,site3)  و هر کدام از این وب سایت ها از یک نسخه خاص از php استفاده می کنند. حال شما می توانید handler mappings مربوط به هر کدام را در FastCGI application process pool ایجاد کنید.

C:\>%windir%\system32\inetsrv\appcmd set config site1 –section:system.webServer/handlers /+”..[name=’PHP448_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php448\php.exe’,resourceType=’Either’]

C:\>%windir%\system32\inetsrv\appcmd set config site2 –section:system.webServer/handlers /+”..[name=’PHP521_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php521\php-cgi.exe’,resourceType=’Either’]

C:\>%windir%\system32\inetsrv\appcmd set config site3 –section:system.webServer/handlers /+”..[name=’PHP525nts_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php525nts\php-cgi.exe’,resourceType=’Either’]

توصیه های امنیتی در رابطه با php:

برای بالا بردن امنیت نسخه php نصب شد توصیه می شود تغییرات زیر را در فایل php.ini خود ایجاد کنید.

allow_url_fopen=Off

allow_url_include=Off

register_globals=Off

open_basedir=”c:\inetpub”

safe_mode=Off

safe_mode_gid=Offmax_execution_time=30

max_input_time=60

memory_limit=16M

upload_max_filesize=2M

post_max_size=8M

max_input_nesting_levels=64

display_errors=Off

log_errors=On error_log=”C:\path\of\your\choice”

fastcgi.logging=0

expose_php=Off

 

فعال کردن تنظیمات php در هر سایت :

در این بخش درباره تنظیمات php برای هر سایت صبحت خواهد شد. هنگامی که هر وب سایت دارای Application Pool مخصوص به خود باشد ممکن است بتوانید یک FastCGIProcess Pool اختصاصی برای هر وب سایت ایجاد کنید.یک FastCGIProcess Pool به وسیله ترکیبی از  FullPath و ویژگی استدلالی به صورت منحصر به فرد شناخته  می شوند.

اگر شما نیاز دارید چندین FastCGIProcess Pool  برای پرسه های اجرای یکسان مانند php-cgi ایجاد کنید شما می توانید  از ویژگی های استدالی برای تشخیص تعاریف  Process Pool استفاده کنید.

برای مثال اگر دو وب سایت  website1  و website2 وجود داشته باشند که باید مجموعه ای از تنظیمات php مربوط به خود داشته باشند می توانید استراتژی های FastCGI به صورت زیر تعریف کنید.

<fastCgi>

    <application fullPath=”C:\PHP\php-cgi.exe” arguments=”-d open_basedir=C:\Websites\Website1″ />

    <application fullPath=”C:\PHP\php-cgi.exe” arguments=”-d open_basedir=C:\Websites\Website2″ />

</fastCgi>

در این مثال، تنظیمات php روی open_basedir  برای تشخیص تعاریف بین process استفاده می شود این تنظیمات همچنین PHP executable را برای process pool  انجام می دهد. شما می توانید،عملیات مربوط به فایل را فقط در پوشه ریشه وب سایت مربوطه انجام دهید.

سپس website1 می تواند php handler mapping را به صورت زیر نمایش دهد.

<system.webServer>

    <handlers accessPolicy=”Read, Script”>

        <add name=”PHP via FastCGI” path=”*.php” verb=”*” modules=”FastCgiModule” scriptProcessor=”C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website1″ resourceType=”Unspecified” requireAccess=”Script” />

    </handlers>

</system.webServer>

 و website2 می تواند php handler mapping را به صورت زیر نمایش دهد.

<system.webServer>

    <handlers accessPolicy=”Read, Script”>

        <add name=”PHP via FastCGI” path=”*.php” verb=”*” modules=”FastCgiModule” scriptProcessor=”C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website2″ resourceType=”Unspecified” requireAccess=”Script” />

    </handlers>

</system.webServer>

مشخص کردن محل فایل php.ini:

هنگامی که می خواهیم از پرسه های php استفاده کنیم  ابتدا باید محل قرار گیری فایل php.ini را بااستفاده از تنظیمات مشخص کنیم. مستندات php معمولا شرح مفصلی از فرایند راه اندازی php را ارائه می دهند. یکی از مکان های که پروسه های php برای دریافت محل فایل php.ini جستجو می کند متغیر محلی PHPRC می باشد. اگر پروسه های php یک فایل php.ini در مسیر که متغییر محیطی phprc معرفی کرده است پیدا کند از آن استفاده خواهد شد در غیر این صورت به محل پیش فرض قرارگیری فایل php.ini خواهد رفت و از آن فایل استفاده خواهد کرد . از متغیر محیطی PHPRC برای این منظور استفاده خواهد شد تا کاربران بتوانند فایل php.ini مورد نظر خود را تعریف و استفاده کنند. به عنوان مثال اگر دو وب سایت نام های website1  و website2 وجود دارند که در مسیر فایل های زیر قرار گرفته اند

C:\website\website1  و C:\website\website2    شما می توانید پلاگین های php.cgi.exe را در بخش FastCGI فایل FileHost.config به شرح زیر انجام دهید.

<fastCgi>

    <application fullPath=”C:\PHP\php-cgi.exe” arguments=”-d open_basedir=C:\Websites\Website1″>

        <environmentVariables>

            <environmentVariable name=”PHPRC” value=”C:\WebSites\website1″ />

        </environmentVariables>

    </application>

    <application fullPath=”C:\PHP\php-cgi.exe” arguments=”-d open_basedir=C:\WebSites\Website2″>

        <environmentVariables>

            <environmentVariable name=”PHPRC” value=”C:\WebSites\website2″ />

        </environmentVariables>

    </application>

</fastCgi>

به این ترتیب website1 می تواند نسخه شخصی خود را از فایل php.ini در مسیر  C:\WebSites\website1 و  website2 در مسیر C:\WebSites\website2  قرار دهند . این پیکربندی  نیز تضمین می کند اگر یک فایل php.ini در مکان مشخص شده توسط متغییر PHPRC مشخص نشود php از پرونده php.ini پیش فرض استفاده خواهد کرد که همان پوشه ی قرار دارد که Php-CGI-exe در آن قرار دارد.

مطالب مرتبط

دیدگاهتان را بنویسید

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