آسیب پذیری Full Path Disclosure یا FPD

با سلام خدمت عزیزان.

چند روزی بود بلاگ رو آپدیت نکرده بودم و علت اش افزایش مشغله های کاری و غیر کاری و تحصیلی بود.

با تازگی با مشکلی با عنوان “Full Path Disclosure” مواجه شدم ؛ قبل از هر کاری در مورد این مشکل تحقیقاتی انجام دادم و سعی کردم با CMS ها و سیستم هایی که قبلا کار کردم (مثل وردپرس) بصورت عملی با FPD آشنا بشم ، خب دیدم چیز خیلی خاص و بزرگی نیست ، البته برای وب سایت های کوچکی مثل یک  وبلاگ 

اکثرا فکر می کنند (یا من اینطور فکر می کنم که بقیه فکر می کنند) که این مشکل از سمت پیکربندی و تنظیمات اصلی سرور (Hosting/Servlet) هست اما اینطور نیست این موضوع بیشتر بر میگرده به کد نویسی در هم برهم یا ‌Sloppy Coding ، چرا؟

چون خیلی از گله ی برنامه نویسان فکر می کنند با تخصیص مقدار Off برای Display Errors در فایل php.ini سرور این مشکل حل می شود و دیگر Path اصلی یا به کل Error نمایش داده نمی شود این مشکل از سمت تنظیمات غلط یا Misconfiguration است اما داستان اینطور نیست ، ما (مدیران سرور) فقط اشتباه شما (برنامه نویسان) را با این کار پنهان می کنیم و هنوز مشکل پابرجاست ، درسته؟

مشکل بزرگتر…

مشکل بزرگتر برای من حل این مورد از سایت است ، یعنی باید برنامه نویسی که باگ سیستم خودش را با گفتن:‌ (این مشکل از کانفیگ سروره) میخواد پنهان کنه را توجیه کنم تا این مشکل از سمت نحوه ی کد نویسی شما و عدم رعایت موارد امنیتی در سیستم نوشته شده توسط شماست.

خب پس مشکل بزرگتر مشخص شد  دانشگاه های گل و بلبل ما هم که سالانه بیشتر از ۲۰۰.۰۰۰ برنامه نویس و مهندس کامپیوتر ول میده بیرون با هزار غرور و من من کردن زیر بار نمیرن که آقا / خانم این مشکل از سمت شماست ، نه مدیر سرور.

اما متاسفانه من سعی کردم مشکل را از طریق تنظیمات سرور و پنهان سازی این مشکل حل کنم ، چرا؟ به خاطر دلایل بالا 

در فایل httpd.conf (یا apache2.conf) که در مسیر اصلی config وب سرور هست مقدار زیر را در virtual host مربوط به آن سایت درج کردم:

در فایل php.ini سرور هم مقدار زیر را طبق زیر هماهنگ کردم:

در آخر هم در کدهای سیستم جستجو کردم هر جا از ini set مربوط به نمایش error ها استفاده شده به برنامه نویس گوشزد کنم.

به دنبال مقدار زیر گشتم:

 

در آخر هم خدافسی می کنم 

تغییر تاریخ یا زمان PHP با .htaccess

گاهی اوقات دیدید که نمایش ساعت در PHP به درستی انجام نمیشه ، به خاطر اینکه Time zone یا همان منطقه زمانی پیش فرض PHP مقدار پیشفرض UTC هست. این مورد را می بایست از طریق php.ini تغییر / تخصیص داد. اما در اکثر بستر و زیرساخت ها امکان ایجاد تغییر در php.ini برای کاربر یا برنامه نویس مقدور نیست.

اما روش هایی مثل ini_set هم برای حل این موضوع وجود داره ، ولی بازهم این Function در خیلی از سرورهای اشتراکی به دلیل مسائل امنیتی بسته شده است.

بهترین روش برای بسترهای میزبانی که از وب سرور Apache استفاده می کنند یا حداقل از .htaccess پشتیبانی می کنند ، تخصیص منطقه زمانی از طریق کد زیر در فایل .htaccess است.

کافی است فایل .htaccess را باز کنید (در بعضی مواقع نیاز به ایجاد فایل دارید) و خط زیر را قرار بدید.

 

نصب Zend Opcache روی PHP های قدیمی تر از ۵٫۵

سلامی دوباره و اینا 

گاهی اوقات مجبورم از PHP 5.5 قدیمی تر روی سرورها استفاده کنم ، اما از نعمت Extension خوبی مثل opcache محروم میشم.

داخل مخزن های remi و epel هم متاسفانه php-opcache فقط برای نسخه ۵٫۵ به بعد در دسترس هست. (البته تا امروز)

برای این کار نیاز به دسترسی root یا Super Privilege به سرور دارید.

۱. نصب PHP Pear روی سرور:

۲. نصب پکیج های مورد نیاز:

۳. داخل سایت Zend Opcache چک کنید آخرین نسخه چیست (در حال حاظر ۷.۰.۴) سپس نصب :

بعد از پروسه کامپایل و غیره و غیره می بایست یک فایل .ini ایجاد کنیم . (البته داخل php.ini اصلی هم میتونید modify کنید اما من پیشنهاد نمی کنم (شاید در آینده گفتم چرا) پس باید دایرکتوری ini یا کانفیگ php را پیدا و فایل زیر رو ایجاد کنید.)

۴. ایجاد opcache.ini در سرور

برای پیدا کردن Directory مربوط به فایل های کانفیگ (php .ini) دستور زیر را اجرا کنید.

به من دایکتوری زیر رو داده:‌

خب حالا فایل میسازیم و مقادیر مربوط به opcache را داخلش میگذاریم و وب سرور را ریستارت می کنیم.

 

برای اینکه مقادیر بالا رو Tune کنید حتما صفحه زیر رو بررسی کنید.

http://php.net/manual/en/book.opcache.php

تا درودی دیگر ، بدرود و اینا