PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : پیکربندی Php



Vahid
October 31st, 2008, 22:06
غیر فعال کردن دسترسی و اداره کردن فایل ها بصورت ریموت و URLs
برای غیر فعال کردن این تابع از این تنظیم استفاده کنید :
PHP کد:

allow_url_fopen = Off


برای محدود کردن بسیاری از حملات به برنامه های تحت وب میتوانید…

ریجستر گلوبال رو غیر فعال کنید ، زیرا این تابع به حمل کننده اجازه میدهد تا آزادانه در بیشتر حالات از ضعف های برنامه نویسی استفاده کند ، فعال بودن این تابع ریسک بالایی برای سرور شماست و اگر برنامه ای تحت وب دارید به فعال بودن نیاز دارد و یا برنامه نویس های شما به فعال بودن اون احتیاج دارن بهتر است بیخیال اون ها بشید و بحرفشون گوش ندهید
خوشبختانه این تابع در php نسخه های ۴/۲/۰ به بالا بصورت معمول غیر فعال می باشد.
برای غیر فعال کردن این تابع از این تنظیم استفاده کنید :
PHP کد:

register_globals = Off


یک راه حل برای فعال کردن این تابع در سرورهایی که غیر فعال کردن می باشد ، بدین صورت که در روت فولدر هاست مورد نظر میتوانید فایل .htaccess رو باز کرده و این دستورالعمل رو در سطر اول به آن اضافه کنید :
PHP کد:

php_flag register_globals on


به قرار دادن این دستور در فایل .htaccess در فولدر روت توجه کنید.

محدود و مشخص کردن آنچه که php می توانید read و write کند :
در اغلب اوقات برنامه و اسکریپت های نوشته شده بزبان php احتیاج به دسترسی I/O به یک ساب فولدر ضروری در فایل سیستم دارد ، بعنوان مثال :
PHP کد:

/var/www/htdocs/files


در این حالت شما میتوانید دسترسی هرچی که fopen و هر کدام از دیگر توابعی که میتوانند read و write کنند را محدود کنید :
PHP کد:

open_basedir = /var/www/htdocs/files


حالت امن و یا Safe Mode :

در این حالت دسترسی به فایل هایی که توسط آپاچی مدیریت نمیشن غیر فعال میشه و دسترسی به خیلی از متغیرها ، توابع و همچنین اجرای برنامه های باینری غیر فعال میشن.

در حالت عادی safe mode برای برنامه نویسان و طراحان بسیار محدود کننده می باشد ، هرچند برای اینکه این حالت مورد پسند و در حالت دلخواه ما قرار گیرد راه متعددی وجود دارد. اما بزرگترین مشکل این حالت تنها بر میگردد به فایل هایی که توسط آپاچی مدیریت میشن، دارای دسترسی از طریق اسکریپت های بزبان php می باشند. شاید برنامه نویسان احتیاج به دسترسی به فایل هایی در محدوده مالکیت گروه های دیگر باشد و یا دسترسی به فایل هایی که توسط برنامه های دیگر بوجود می آیند باشد. در این حالت شما می توانید از تنظیم زیر برای انجام این دسترسی ها استفاده کنیذ :

PHP کد:

safe_mode = Off

safe_mode_gid = On


با فعال بودن safe_mode_gid بجای safe_mode ، پی اچ پی ( PHP ) قادر به دسترسی به فایل هایی می باشد که خارج از محدوده و مالکیت آپاچی می باشد. خوب ممکن هست خیلی از توسعه دهندگان ، برنامه نویسان همزمان بروی یک سرور مشغول بکار باشند شما میتوانید آنها رو به گروه آپاچی اضافه کنید و آنها رو گروه عادی نمایید و یا هرچیزی که باید ست بشه.

safe_mode همچنین مفید برای جلوگیری از اجرای برنامه های باینری می باشد ، اما گاهی اوقات شما نیاز به اجرای برنامه های خاص دارید. در این حالت شما می توانید آنها را در یک دایرکتوری مانند /var/www/binaries قرار داده و از دستورالعمل زیر استفاده کنید :

PHP کد:

safe_mode_exec_dir = /var/www/binaries


در نهایت ، جهت دسترسی به برخی متغییرها از تنظیمات زیر استفاده کنید ، بشرطی که توسط یک کاما از لیست پیشوند ها جدا شده باشد. تنها متغییرهایی که نام آنها با این پیشوندها شروع شود قادر به دسترسی می باشند :

PHP کد:

safe_mode_allowed_env_vars = PHP_


87/07/15 - اعمال محدودیت ها :

یکی از ایده های بسیار خوب همیشه محدود کردن مدت زمان اجراهای PHP ، مصرف حافظه، ارسال و آپلود دیتا بوده است.

برای اعمال آنها دستورالعمل های زیر را انجام دهید :

PHP کد:

بیشترین مدت زمان اجرای اسکریپت ؛ max_execution_time = 30

حداکثر زمان مصرف شده جهت تجزیه ورودی ؛ max_input_time = 60

بیشترین مقدار استفاده یک اسکریپت از حافظه ؛ memory_limit = 16M

بیشترین حجم مجاز برای آپلود ؛ upload_max_filesize = 2M

حداکثر حجم ارسال ؛ post_max_size = 8M


نکته : اصلاً نیازی به گفتن من نیست ، شما میبایست مقدار توابع بالا را بمیزان استفاده و کارائی مورد نیاز کم و زیاد کنید.

محدود کردن دسترسی به فایلهای مشخص شده :

خیلی از فایل های نمیبایستی که توسط کاربران شما مورد دسترسی قرار گیرند ، خیلی از توسعه دهندگان به این عامل نیاز دارند اما ، نکته مهم اینجاست که این فایل ها چون تحت نظارت و تجزیه و تحلیل موتور PHP قرار ندارند قابل دسترسی توسط دیگران خواهد بود و سورس فایلها براحتی قابل نمایش خواهد بود ، بطور مثال :

PHP کد:

http://www.example.com/includes/settings.inc


خیلی از این فایل ها محتوی اطلاعات مهمی از قبیل پسورد MySQL و … می باشند ، برای همین شما می بایست مطمئن شوید تا کاربران به این فایل ها دسترسی ندارند. فایل هایی از این قبیل :

PHP کد:

.sql, .mysql, and .pgsql


نمونه دیگر میتوان به فایل های بک آپ و یا پشتیبان اشاره کرد. خیلی از مشترکان از فایل ها و دیتابیس های خود پشتیبان تهیه کرده و آنها را در کنار فایل های اصلی و یا مسیری که قابل دسترسی می باشد قرار میدهند. بر فرض مثال اگر شما فایل index.php را ویرایش کنید فایل اصلی با نام index.php~ در کنار فایل ویرایش شده قرار میگیرد ، و چون با ~ تمام میشود دیگر تحت مدیریت و نظارت PHP نخواهد بود ! و اگر کاربری آنرا بشکل زیر فرا بخواند میتواند محتویات داخل آن را بسادگی مشاهده کند :

PHP کد:

http://www.example.com/index.php~


برای دوری کردن از این ریسک ، شما میتوانید از این دستور العمل آپاچی استفاده کنید :

http://www.resort.ir/wp-content/uploads/2008/10/denyfromall.gif

میتوانید این دستور را داخل یک فایل .htaccess و یا در تنظیمات پیکربندی آپاچی قرار دهید. افزودن فایل فرمت های دیگر نیز بهمین شکل میسر می باشد.

در قسمت بعدی راجع به پیغام های خطا و واقعه نگاری و اینکه چطور ساختار PHP را مخفی کنیم خواهم نوشت.

ssh
November 1st, 2008, 14:15
خیلی عالی دستتون درد نکنه
اما اگر بتونین یک متن خوب میزان و عالی برای دیسیبل فانکشن بدید ممنون میشم

Vahid
November 1st, 2008, 14:44
یه فایل Php.ini کانفیگ شده از hostmonster
اینو ببینید و تغیر اعمال کنید حتما درست میشه

secure_host
November 2nd, 2008, 19:25
خیلی عالی دستتون درد نکنه
اما اگر بتونین یک متن خوب میزان و عالی برای دیسیبل فانکشن بدید ممنون میشم


symlink,shell_exec,exec,proc_close,proc_open,popen ,system,dl,passthru,escapeshellarg,escapeshellcmd
اينها function هايي هستند كه بايد حتما disable بشه
function هاي ديگه اي هم هست كه باعث ميشه روت بده ولي اينها از همه مهمتره

DedicatedBOX
November 2nd, 2008, 21:03
اينها function هايي هستند كه بايد حتما disable بشه
function هاي ديگه اي هم هست كه باعث ميشه روت بده ولي اينها از همه مهمتره
از کی تا حالا با بستن 4 تا فانکشن میشه جلوگیری کرد از روت کردن؟

DedicatedBOX
November 2nd, 2008, 21:52
PHP براي تنظيم عمليات و وظايف مختلفي را كه بر روي سرور اعمال مي نمايد را در فايل با عنوان PHP.ini ذخيره مي نمايد و اين امكان را به برنامه نويس مي دهد تا به تغيير اين فايل بتواند سرور خود را براساس نياز خود مديريت نمايد.


شما مي توانيد اين فايل را به راحتي در مسير نصب PHP پيدا نماييد.
در اين قسمت ما مي خواهيم براي شما بعضي پيكر بندي مفيد و مواردي را كه بيشتر مورد استفاده قرار مي گيرد را براي شما توضيح دهيم كه مي توان به شرح زير بيان نمود:
1.register_globals
2.error_reporting and display_errors
3.extension and extension_path
4.session.save_path
5.max_execution_time

register_globals
قبل از PHP 4.2.0 اين مقادير بصورت پيش فرض فعال (ON) بودند ولي بعد از اين نسخه اين مقادير بصورت غير فعال تبديل كردند. دليل اين تغيير آن بودكه با فعال بودن اين گزينه امنيت كدها كاهش مي يافت . و بهمين دليل مطمئن شويد در فايل PHP.ini مقدار off باشد.

error_reporting and display_errors
هنگام كد نويسي پيشنهاد مي شود مقدار error_reporting = E_ALL تبديل نماييد و بعد از پايان كدنويسي مقدار آنرا به error_reporting = E_NONE تغيير دهيد.
دليل اينكه E_ALL در حين برنامه نويسي بايد قرار داشته باشد اين است كه مي تواند برنامه نويس اشكالات و خطاهاي بيشتري از كدهاي خود بگيرد و در پايان برنامه نويسي كه نمي خواهيم خطاهاي ما لو برود و باعث آبروريزي نشود آنرا بصورت E_NONE تبديل مي كنيم.

extension and extension_path
با آمدن PHP 4 51 فرمت جديد از قبيل كتابخانه GD (براي ساخت گرافيك و دستكاري آن)، CURL ، پشتيباني ازPostgreSQL و غيره اضافه گرديد. اين فرمتها بصورت اتوماتيكي غيرفعال مي باشند.
مقدار extension_path بايد مسير فولدر extension از جايي كه PHP نصب شده است يعني PHP_INSTALL_DIR/extensions بايد قرار گيرد ( PHP_INSTALL_DIR همان مسير نصب PHP است) مثلا PHP در مسير C:\Program Files\Apache Group\Apache2\php نصب شده است، بنابراين مسير فولدر extension بصورت زير است:
extension_path = C:/Program Files/Apache Group/Apache2/php/extensions/
فراموش نكنيد كه حتما يك اسلش ( / ) در آخر آن قرار دهيد كه در غير اينصورت كار نخواهد كرد.
بعد از مشخص كردن مسير، شما بايد extension_path را از حالت توضيح خارج نماييد. در PHP.ini براي نمايش توضيح از علامت سمي كالن ( ; ) استفاده مي شود. براي مثال اگر شما مي خواهيد از كتابخانه GD استفاده نماييد ، شما بايد سمي كالن از ابتداي خط ;extension=php_gd2.dll حذف نماييد و آنرا بصورت extension=php_gd2.dll در آوريد.

session.save_path
يكي از تنظيمات PHP براي ذخيره session ها، تنظيم مسير آنها مي باشد، كه در صورت مشخص نشدن اين مسير، sessionها بدرستي عمل نخواهند كرد. براي تنظيم اين مسير در ويندوز شما مي توانيد مسير آنرا بصورت زير قرار دهيد:
c:/windows/temp/

max_execution_time
بصورت پيش فرض مقدار اين ثابت، بر روي 30 (ثانيه) تنظيم شده است. اما براي بعضي اسكريپتها اين زمان كافي نيست و احتياج به زمان بيشتري دارد و در بعضي مواقع به زمان كمتري احتياج مي باشد. براي مثال براي كدهاي پشتيبان گيري از بانك اطلاعاتي، ممكن است احتياج به زمان بيشتر براي ذخيره بانك اطلاعاتي حجيم دارد.
اگر شما فكر مي كنيد كه اسكريپت شما نياز به زمان بيشتري دارد، شما مي توانيد براي مثال آنرا به حداكثر زمان يعني 900 ثانيه (15 دقيقه) تنظيم نماييد و آنرا بدين صورت تغيير دهيد:
max_execution_time = 900
PHP توابعي راحت و آساني براي تغيير دادن پيكربندي PHP در زمان اجرا دارد، كه مي توان به ini_set() اشاره كرد. توجه داشته باشيد اين تابع فقط در زماني كه اسكريپت شما در حال اجرا است قابل تغيير است و نمي تواند پيكريندي را بصورت دائمي تغيير دهد.

DedicatedBOX
November 2nd, 2008, 21:56
فايل پيکربندي PHP
قبل از شروع مطالب نگاهي اجمالي به ويژگيهاي فايل پيکربندي PHP منطقي به نظر مي رسد. نام اين فايل php.ini مي باشد و به دلايلي از ساختار کلي فايلهاي ini که بيشتر در برنامه هاي کاربردي ويندوز استفاده مي شود، پيروي مي کند. اين فايل متني به صورت ASCII مي باشد که به بخشهايي (session) تقسيم مي شود. هر بخش متغيرهايي را که مربوط به آن بخش مي شوند، در بر مي گيرد. هر بخش چيزي شبيه زير مي باشد:

[MySection]
variable=\"value\"
anothervariable=\"anothervalue\"


نام بخش در يک جفت براکت"[]" در بالا قرار مي گيرد. و زير آن در هر سطر يک متغير با مقدارش قرار مي گيرد. متغيرها به حروف حساس (case sensitive) هستند و نمي توانند شامل فاصله (space) باشند، در حالي که مقادير متناظر آنها مي توانند اعداد، رشته کاراکتري (string) و يا Boolean باشند.

سمي کالن ";" در ابتداي هر سطر به عنوان نشانگر درج توضيحات (comment) مي باشد. اين راهي ساده براي فعال يا غيرفعال کردن ويژگيهاي PHP مي باشد، به جاي حذف کردن يک سطر مي توانيد به اين روش آن را به توضيح تبديل کرده که در پردازش فايل ها شرکت نخواهد کرد. در صورتي که فکر مي کنيد ممکن است بعد ها بخواهيد از ويژگي که اکنون به کارتان نمي آيد، استفاده کنيد بهتر است آن را پاک نکنيد.

براي اينکه PHP بتواند فايل php.ini را تشخيص بدهد بايد آن را در دايرکتوري جاري، دايرکتوري که در متغير $PHPRC تعريف شده، يا دايرکتوري که هنگام کامپايل مشخص شده است(براي ويندوز اين همان دايرکتوري اصلي PHP است) نگهداريد.

بعد از اينکه شما تغييراتي در فايل php.ini داديد براي آنکه تغييرات اعمال شوند بايد سرور خود را مجددا راه اندازي نماييد (سرور را restart کنيد). البته فرض بر اين است که شما قبلا در حال استفاده PHP بر سرور خود بوده ايد. براي استفاده هاي command-line از PHP فايل پيکربندي php.ini در هرباري که برنامه PHP احضار مي شود خوانده و چک مي شود.


تنظيم ويژگيهاي مفسر
اولين مرحله در اين مقاله از مهمترين گامهاي آن مي باشد، ويژگيهايي که به مفسر زبان PHP مربوط مي شود. اولين مورد در اينجا engine variable مي باشد که چک مي کند که PHP engine بايد فعال "on" يا غير فعال "off" باشد. Off کردن اين متغير به معني اين است که کدهاي PHP توسط سرور تفسير نشوند.معمولاً نيازي به اين تغيير حس نمي شود، پس اين متغير را به صورت on رها کنيد.

engine=On


متغير short_open_tag کنترل مي کند که آيا مفسر بايد تگهاي کوتاه را همانند تگ استاندارد تشخيص دهد يا نه.در صورتي که تشخيص مي دهيد اين نمونه تگها باعث ناسازگاري با ديگر زبانها مي شوند يا اينکه تصميم به استفاده از قوانين syntax مختص PHP داريد مي توانيد آن را off کنيد.

short_open_tag = On


معمولاً session, cookie و اطلاعات HTTP header در يک اسکريپت PHP بايد قبل از توليد هرگونه خروجي توسط آن اسکريپت فرستاده شوند. در صورتي که اين در برنامه شما امکان پذير نيست مي توانيد هر چه را که PHP به نام output buffering مي شناسد، توسط متغيرهاي output_buffering فعال کنيد.

با on بودن output buffering، زبان PHP خروجي اسکريپت شما را در يک بافر مخصوص نگه مي دارد و هنگامي آنها را مي فرستد که به طور مشخص به آن دستور داده شود. اين به شما امکان مي دهد که cookieها يا اطلاعات HTTP header را از وسط يا انتهاي کد اسکريپت خود بفرستيد. هرچند اين مي تواند کارآيي را در حاشيه کاهش دهد.

output_buffering = Off


شما مي توانيد با يک عدد به عنوان مقدار براي متغير output_buffering اندازه بافر را تعيين کنيد.

output_buffering = 2048


هنگامي که PHP شروع به کار مي کند يک پيام حاوي شماره نسخه خود به هدر استاندارد سرور مي افزايد.براي غيرفعال کردن آن مي توانيد متغير expose_PHP را off کنيد.اين مي تواند مفيد باشد، مثلا اگر بخواهيد امکانات وب سرور خود را از ديد هکرها پنهان کنيد.

expose_PHP = On



تنظيم مسير جستجوي
شما مي توانيد مسير جستجويي را براي PHP با تنظيم متغير include_patch که ليستي از مسيرها را مي پذيرد، مشخص کنيد. PHP هنگامي که با فايلي که مسير آن مشخص نشده است ، مواجه مي شود به طور اتوماتيک اين مسيرها را چک مي کند.
اگر شما کتابخانه اي از توابع يا مجموعه اي از کلاسها داريد که زياد از آنها استفاده مي کنيد مي توانيد دايرکتوري موقعيت آنها را در اين متغير قرار دهيد. همچنين اين متغير مکان مناسبي براي اضافه کردن دايرکتوري PEAR خود PHP مي باشد، که مجموعه اي از کلاسهايي که بسيار استفاده مي شوند را شامل مي شود.

include_path = \".:/usr/local/lib/php/pear:\"


کاربران ويندوز براي مشخص کردن چندين دايرکتوري بايد از سمي کالن";" بين آنها استفاده کنند و کاربران unix از کالن ":".

دو متغير جالب در اين زمينه auto_prepend_file و auto_append_file مي باشند. اين متغيرها فايلهايي را مشخص مي کنند که PHP به ابتدا يا انتهاي هر سند PHP اضافه خواهد کرد. اين مورد بيشتر براي اضافه کردن header و footer به صفحاتي است که توسط PHP ايجاد مي شوند، به طوري که باعث مي شود تعدادي خط کد به هر سند PHP که شما مي نويسيد اضافه گردد.
اين فايلها هم مي توانند اسکريپتهاي PHP و هم html معمولي باشند، ولي کدهاي PHP براي اين امر بايد در تگ استاندارد محصور شده باشند.

auto_prepend_file = /home/web/includes/header.php
auto_append_file = /home/web/includes/legal.php



چگونگي رفتار با خطاها
خطا ها در PHP در چهار دسته مي آيند: parsing errors يا خطاي زمان تجزيه (کامپايل)، تذکرات درمورد خطاهاي موجود در کد مثلا مقدار دهي نکردن يک متغير، warning يا هشدار و fatal error. معمولا هنگامي که PHP با يکي از خطاهاي parsing error يا warning يا fatal error مواجه مي شود، خطاها را نمايش مي دهد و اگر خطا از نوع fatal error باشد اجراي اسکريپت را در همان نقطه متوقف مي کند. شما مي توانيد اين رفتار را با متغير error_reporting که چند فيلد خطا را مي گيرد و تنها خطاهايي را که با آنها سازگار باشند نمايش مي دهد، اصلاح کنيد.

error_reporting = E_ALL


براي غير فعال کردن نمايش خطاها مقدار متغير display_errors را به نادرست تغيير دهيد و به جاي آن پيام خطاها را در ثبات خطاها از طريق متغير log_errors بنويسيد.
انجام اين کار براي امنيت بيشتر مفيد است، با غيرفعال کردن نمايش خطا شما اطلاعات ويژه سيستم خود را مخفي مي کنيد بدون توجه به اينکه آيا کاربران قصد خراب کردن سايت شما را دارند يا فقط استفاده مي کنند.به جاي آن شما بايد خطاها را در يک فايل دلخواه يا ثبات خطاي سيستم (system logger)، با تنظيم مقدار متغير error_log به مسير فايل انتخابي يا مقدار پيش فرض "syslog"، ثبت کنيد. فقط به ياد داشته باشيد که مرتبا به اين فايل سربزنيد تا ببينيد که در برنامه شما چه خطاهايي وجود دارد.

display_errors = Off
log_errors = On
error_log = \"error.log\"



فعال کردن توسعه ها
توسعه هاي متعددي براي PHP موجود است. در سيستمهاي يونيکس لازم است که اين توسعه ها در زمان کامپايل ساخته شوند. در ويندوز، dll هاي باينري وجود دارند که بايد ضميمه شوند. متغير extension_dir محتوي نام شاخه اي است که PHP در آن به دنبال اين توسعه ها مي گردد. مثلا:

extension_dir = \"C:\Program Files\Internet Tools\Apache\bin\php4\extensions\"


نسخه ويندوز PHP به همراه ۲۰ توسعه منتشر مي شود که تمامي آنها در فايل php.ini ليست شده اند. براي فعال کردن هر توسعه، علامت سمي کالن جلوي آن را حذف کرده و سرور خود را از نو راه اندازي کنيد. براي غير فعال کردن يک توسعه نيز مي توانيد جلوي آن علامت سمي کالن رو اضافه کنيد.

اگر توسعه مورد نظرتان در ليست توسعه ها در فايل php.ini نيست از متغير extension استفاده کرده و نام dll مورد نظر را به آن نسبت دهيد. مثلا:

extension=php_domxml.dll
extension=php_dbase.dll



تنظيم متغيرهاي مربوط به توسعه ها
متغير هاي مربوط به توسعه ها، در بخش جداگانه اي از فايل پيکربندي (php.ini) ذخيره مي شوند. براي مثال تمام متغيرهايي که به توسعه هاي MySQL مربوط مي شوند بايد در قسمت [MySQL] در فايل php.ini، قرار بگيرند.

اگر قصد استفاده از تابع mail در PHP را داريد، 3 متغير وجود دارد که بايد آنها را تنظيم کنيد. متغيرهاي SMTP و sendmail_from (در ويندوز) يا sendmail_path (در يونيکس) در هنگام ارسال e-mail از طريق تابع mail مورد استفاده قرار مي گيرند. در ويندوز اين متغير ها براي تنظيم SMTP Server و همچنين براي تعيين آدرس From در ساختار e-mail به کار مي روند. در يونيکس متغير sendmail_path مسير MTA يا Mail Transfer Agent را براي ارسال mail تنظيم مي کند.

SMTP = myserver.localnet.com
sendmail_from = me@localhost.com
sendmail_path = /usr/sbin/sendmail


متغيرهاي java.class.path ، java.home، java.library و java.library.path همگي آدرس کلاس ها و کتابخانه هاي جاوا را تنظيم ميکنند. اين مقادير به وسيله توسعه هاي جاوا مورد استفاده قرار مي گيرند. بنابراين اگر مي خواهيد PHP بتواند ارتباط صحيحي با برنامه هاي جاواي شما برقرار کند از درستي و معتبر بودن مقادير اين متغير ها اطمينان حاصل کنيد.

java.class.path = .\php_java.jar
java.home = c:\jdk
java.library = c:\jdk\jre\bin\hotspot\jvm.dll
java.library.path = .\


متغير session.save_path مشخص کننده آدرس شاخه موقتي است که براي ذخيره اطلاعات session ها بکار مي رود. معمولا اين متغير به طور پيش فرض مقدار /tmp را دارد، اما از آنجا که اين شاخه در ويندوز وجود ندارد بايد آن را با آدرس درست شاخه موقت ويندوز تصحيح کنيد در غير اين صورت هنگام فراخواني دستور session_start با خطا مواجه مي شويد. همچنين مي توانيد با تنظيم متغير session.cookie_lifetime مدت اعتبار cookie هاي session را بر حسب ثانيه مشخص کنيد.

session.save_path = c:\windows\temp
session.cookie_lifetime = 1800



تنظيمات مربوط به امنيت
تعدادي متغير در php.ini وجود دارد که به امنيت PHP نصب شده بر روي سيستم شما مريوط مي شوند. مهمترين آنها متغير safe_mode مي باشد که به طور مثال استفاده از آن براي محدود کردن آنچه کاربر مي تواند از طريق PHP انجام دهد بهISP ها توصيه ميشود.

safe_mode = Off


اگر safe mode فعال باشد (safe_mode = on) مي توانيد با تنظيم متغير safe_mode_include_dir مشخص کنيد که کدام شاخه ها براي فايل ها مورد جستجو قرار بگيرند. همچنين ميتوانيد نوع برنامه هايي که کدهاي PHP مي توانند از طريق فرمان exec آنها را اجرا کنند، را محدود کنيد. بدين منظور بايد اين برنامه هاي مجاز را در يک شاخه مخصوص قرار دهيد و از طريق متغير safe_mode_include_dir به PHP بگوييد که تنها در آن شاخه به دنبال آنها بگردد.بدين ترتيب تنها برنامه هاي درون اين شاخه توسط فرمان exec قابل دسترس خواهند بود.

safe_mode_include_dir = /usr/local/lib/php/safe-include
safe_mode_exec_dir = /usr/local/lib/php/safe-bin

DedicatedBOX
November 2nd, 2008, 22:04
قسمت2

شما مي توانيد اعمال مربوط به فايل ها را از طريق متغير open_basedir محدود کنيد. آدرس نسبت داده شده به اين متغير به عنوان ريشه اصلي (root) براي اعمال مربوط به فايل ها به کار مي رود. وقتي که اين متغير مقدار مي گيرد فايلهايي که در ساختار درختي اين ريشه نباشند براي PHP غير قابل دسترس خواهند بود. اين روش مناسبي براي محدود کردن کاربران يک سيستم اشتراکي مي باشد تا آنها تنها به آدرسهاي مربوط به خودشان دسترسي داشته باشند.

open_basedir = /home/web/


متغير max_execution_time تعيين ميکند که PHP حداکثر چند ثانيه منتظر پايان يافتن يک کد باشد قبل از آنکه به اجبار آن را خاتمه دهد. وقتي کد شما گرفتار حلقه هاي بينهايت ميشود اين متغير بکار مي آيد.اگر چه ممکن است اين موضوع گاهي مزاحمت ايجاد کند مثلا زماني که کد نوشته شده نياز به انجام اعمال زمانبري دارد، مثلا upload کردن يک فايل حجيم. در اين مواقع بايد مواظب باشيد که اين مقدار را افزايش دهيد تا مانع آن شويد که PHP اجراي کد شما را در وسط يک کار مهم خاتمه دهد.

max_execution_time = 90



تنظيمات مربوط به upload فايل ها و متغير هاي فرمها
اگر پيکربندي هاي امنيتي که تاکنون ذکر شد کافي نيست باز هم مي توانيد با غير فعال کردن قابليت upload فايل از طريق متغير file_uploads، يا با محدود کردن حداکثر حجم قابل upload از طريق متغير upload_max_filesize سيستم خود را از اين هم امن تر کنيد. اغلب تمايل خواهيد داشت که فضاي کوچکي را براي upload فايلها اختصاص دهيد مگر اينکه برنامه اي داشته باشيد که قرار باشد فايل هايي نظير يک گالري عکس يا يک FTP Service را پذيرا باشد.

file_uploads = On
upload_max_filesize = 2M


اگر تمايلي به upload کردن فايلها نداريد اما از تعداد زيادي فرم در صفحات PHP تان استفاده ميکنيد، 2 متغير ديگر وجود دارد که بايد برايتان جالب باشد. اول متغير register_globals، علت بيشترين سردردهاي برنامه نويسان با سابقهPHP در PHP 3.x اين متغير به طور پيش فرض فعال بود (on) که موجب ميشد وقتي يک فرم submit مي شد متغيرهاي آن بطور اتوماتيک به متغيرهاي PHP تبديل شوند.
مسايل امنيتي موجب شد که در PHP 4.x اين متغير بطور پيش فرض غير فعال باشد. (off). در نتيجه متغيرهاي فرم تنها به کمک آرايه هاي ويژه $_GET و $_POST قابل دسترس باشند. اين امر خيلي از کدهاي نوشته شده با PHP 3.x را با مشکل مواجه ساخت. مثلا مقداري که در يک فيلد وارد شده بود در PHP 3.x با $email قابل دسترس بود در حالي که در PHP 4.x با $_POST[email] يا $_GET[email] ميتوان به آن رجوع کرد.
ميتوانيد اين متغير را غير فعال کنيد (off) تا امنيت بيشتري را در برابر حملاتي که از طريق فرمها صورت مي گيرند برقرار کنيد. به منظور سازگاري با کدهاي نوشته شده با PHP 3.x آن را فعال کنيد:

register_globals = on


متغير ديگري که به کار با فرم ها مربوط ميشود post_max_size است که کنترل مي کند حداکثر چه حجم داده اي توسط متد POST يک فرم پذيرفته شود. به نظر نمي آيد که زماني لازم شود اين مقدار را از 8 MB افزايش دهيد. در عوض احتمال دارد بخواهيد آن را به يک مقدار واقعي تر تغيير دهيد. به هر حال اگر قصد داريد از امکانات upload فايل در PHP استفاده کنيد اين مقدار را بيشتر از مقدار متغير upload_max_size قرار دهيد.

post_max_size = 8M


يک متغير جديد هم در PHP 5 معرفي شده است: max_input_time. که حداکثر زمان بر حسب ثانيه که عمل دريافت داده هاي ورودي از طريق POST ،GET و PUT مي تواند طول بکشد را مشخص مي کند. اگر برنامه شما تحت يک اتصال کند اجرا مي شود بهتر است اين مقدار را افزايش دهيد تا به برنامه اجازه دهيد مدت بيشتري را به دريافت داده هاي ورودي اختصاص دهد.

max_input_time = 90



افزايش کارآيي
هنوز مقادير ديگري هم وجود دارد که با دستکاري آنها مي توانيد کارايي مفسر PHP را بالا ببريد. به منظور جلوگيري از اجراي کدهايي که ممکن است تمام حافظه موجود سيستم را اشغال کنند، PHP به شما اجازه مي دهد که براي استفاده از حافظه محدوديتي معين کنيد. اين کار از طريق متغير memory_limit قابل انجام است که حداکثر ميزان حافظه قابل استفاده توسط يک برنامه واحد را مشخص مي کند.

memory_limit = 8M


مقدار متغير memory_limit اغلب بايد از مقدار متغير post_max_size بيشتر باشد.
مساله ديگري که با دانستن آن مي توانيد کارايي را افزايش دهيد غير فعال کردن متغيرهاي $argc و $argv است که تعداد و محتواي آرگومان هاي خط فرمان که به يک برنامه ارسال شده اند، را مشخص مي کنند.

register_argc_argv = false


همينطور غير فعال کردن آرايه هاي $HTTP_GET_VARS , $HTTP_POST_VARS . چرا که به احتمال زياد در دنياي جديد $_GET , $_POST ديگر نيازي به آنها نيست. غير فعال کردن اين اجزا باعث بهبود کارآيي مي شود البته فقط در PHP 5 و از طريق متغيرregister_long_arrays قابل انجام است.

register_long_arrays = false



تابع ini_set
و در آخر نکاتي در مورد تابع ini_set. در حالي کهPHP تمام تنظيمات اش را در هنگام بالا آمدن، از فايل php.ini مي خواند، اين اجازه را به شما مي دهد که اين تنظيمات را به کمک تابع جالب ini_set و در برنامه خود انجام دهيد. البته اين تغييرات فقط براي همان برنامه اي که در آن از تابع ini_set استفاده کرده ايد اعمال مي شوند .اين تابع 2 آرگومان مي گيرد: نام متغير پيکربندي اي که مي خواهيد مقدارش را تغيير دهيد و مقدار جديد آن. اين هم يک مثال که حداکثر زمان اجراي مجاز براي برنامه اي که اين کد در داخل آن نوشته شده است را افزايش مي دهد.

<?php

ini_set('max_execution_time', 600);

// more code

?>


باز هم يادآوري مي شود که اين تنظيمات در داخل هر برنامه اي که نوشته شود فقط همان برنامه را تحت الشعاع قرار مي دهد. وقتي که برنامه خاتمه پيدا کند مقدار متغير به طور اتوماتيک به مقدار اوليه تغيير خواهد کرد.

اگر برنامه هايPHP شما بر روي يک سرور مشترک (Shared Server) اجرا مي شوند احتمالا شما دسترسي به فايل پيکربندي php.ini نخواهيد داشت. در اين موارد تابع ini_set کمک شاياني مي کند. چرا که اجازه مي دهد تنظيمات مورد نظرتان را براي برنامه هاي خودتان اعمال کنيد.

DedicatedBOX
November 2nd, 2008, 22:04
اینجا هم توضیحاتی هست
نکاتی مفید در مورد تنظیم php.ini (مقاله کامل) (http://forums.nsd.ir/nsd/showthread.php?tid=371)

Vahid
November 2nd, 2008, 22:13
فکر کنم منابع هم بگی بد نباشه

mdf092
September 20th, 2010, 18:43
امروز دنبال امن کردن php بودم که مقاله زیر رو پیدا کردم
گفتم شاید بد نباشه اینجا هم بذارم

30+ PHP Best Practices for Beginners | Nettuts+ (http://net.tutsplus.com/tutorials/php/30-php-best-practices-for-beginners/)

البته بخشی از نکات رو پوشش میده و میتون درکنار بقیه مکمل باشه

andy1074
June 9th, 2012, 16:50
من کلا به این توصیه ها و دستورات هیچ کدومتون دیگه عمل نمی کنم چوون خیلی از شماها حتی خودتونم چیرایی که می نویسید رو فقط شنیدین و کپی و پیست می کنین
تمام آموزشهاتون ناقصه و آدم بدبخت میشه
خیلی جالبه دو صفحه راجع به php.ini صحبت کردین هیچ کسی نگفت چطوری میشه از ssh بهش دسترسی پیدا کرد و ادیتش کرد

hpnn.wm
June 9th, 2012, 17:16
می خواید گوش نکنید
چرا این تاپیک رو 4 سال پیش باز نکردید
فکر کنم اون موقع دوم راهنمایی می خواندی
:))