شنبه 24 آذر 1397 |  عضویت / ورود






[ بخش اصلی آموزشها | افزودن آموزش | داری بیشترین امتیاز | دارای بیشترین بیننده | جدیدترین نظرات ]

امنیت در تابع include در php



این آموزش مربوط است به موضوع آموزش PHP‏ که توسط Gytyonline در تاریخ: Friday, 2011 April 08 ارسال شده است.   |   تعداد بازدید: 7905 بار   |   امتیاز متوسط: 5

صفحات مقاله: صفحه 1 | صفحه 2 |


امنیت در تابع include در php

بعد از گذاشتن 2 آموزش مفید و بسیار خوب در مورد توابع include در سایت یعنی فرق include و require و توضیح include_once و require_once در زبان PHP و مباحث حرفه‌ای تغییر basedir در include کردن در زبان PHP و همینطور href در HTML آموزشی تکمیلی در راستای همان دو آموزش برایتان قرار خواهم داد تا این آموزش‌ها کامل تر شوند. حتما به همان دلایلی که در آموزش‌های قبل ذکر شده است شما هم بار‌ها و بارها از این توابع در اسکریپت‌های خود استفاده کرده‌اید مثلا برای وارد کردن هدر یا فوتر برای سایر صفحات اما همیشه استفاده از این توابع توسط برنامه نویس نمی‌باشد و در برخی موارد مثلا انتخاب کردن زبان سایت یا انتخاب قالب توسط کاربر از این توابع استفاده می‌شود به عنوان مثال در اسکریپت خود می‌نویسیم:

include

 

 

 

 

که متغییر lan$ توسط کاربر توسط یک combo box مشخص میشه و به عنوان مثال یکی از مقادیر farsi.php و یا english.php را برای متغییر lan$ برنامه نویس در نظر می‌گیرد و توسط فرمی فرستاده می‌شود سمت سرور و در نهایت فایل درستور include خواهد شد:

include

 

 

 

 

 

و در شاخه language یکی از دو فایل farsi.php و یا english.php انتخاب خواهد شد و در ظاهر همه چیز درست به نظر می‌رسد و همه چیز امن اگر این چنین فکر می‌کنید باید بگم که در اشتباه هستید اگر باور نمی‌کنید به نکته‌های زیر توجه کنید: 
فکر کنید به جای اینکه فایل‌های زبان سایت در یک شاخه جدا بودن در شاخه اصلی کنار بقیه فایل‌ها بودن و یا اینکه کنار فایل‌های زبان سایت فایل‌های دیگه‌ای هم وجود داشتن که توسط نرم‌افزار‌هایی کاربر می‌توانند لیست کامل فایل‌ها و شاخه‌های موجود بر روی هاست شما را بدست آورد حال کافی می‌باشد که کاربر خودش یک فرم ایجاد کند و به سرور و آدرس مشخص شده ارسال نمایید و به‌ جای اینکه یکی از دو متغییر farsi.php و یا english.php فرستاده بشود برای متغییر lan$ اسم یکی دیگر از فایل‌های موجود را برای این متغییر ارسال خواهد کرد فایل‌های مهمی در همان شاخه و به همین راحتی به آنها دسترسی پیدا کند نه تنها فایل php بلکه سایر فایل‌ها چون اسم فایل و پسوند آن توسط کاربر مشخص می‌گردد!! 
خوب حالا شاید بگید خوب رفع این مشکل کار چندانی نخواهد برد و به راحتی قابل حل خواهد بود به این صورت که ما پسوند فایل رو خودمان تعیین میکنیم یعنی می‌نویسیم:

include

 

 

 

 

و به این ترتیب کاربر فقط می‌تونه فایل‌هایی با پسوند php را اجرا نماید و برای اینکه نتواند بقیه فایل‌ها را اجرا کند این فایل‌ها را داخل شاخه‌ی جدا قرار خواهیم داد مثلا داخل شاخه Language که فقط شامل 2 فایل زبان سایت یعنی farsi.php و english.php می‌باشد و مشکلات حل خواهد شد به همین راحتی و موقع ارسال فرم هم برای متغییر lan$ مقادیر farsi و english را تعیین خواهیم کرد که فقط اسم فایل فرستاده شود.
اما واقع با این کار دیگه مشکلی وجود نداره و این تابع امن خواهد بود؟!
اگر جواب شما بله می‌باشد باز در اشتباه هستید! خوب بیاید دقیق‌تر شویم بر روی موضوع.
ما مقادیر farsi و english رو فقط فرستادیم و پسوند هم که از قبل تعیین شده پس مشکل کجا می‌باشد؟ شاید در اینجا ما بتوانیم فایل‌ها را جدا کنیم اما در مواقعی که نتوانیم فایل‌های مورد نظر رو از سایر فایل‌ها جدا کنیم چه طور؟
حالا بگذارید باز هم دقیق‌تر شویم به نظر شما اگر در همه حالات فایل‌ها را در شاخه‌ای جدا قرار دهیم کاربر دیگر نمی‌تواند سایر فایل‌ها را اجرا نماید؟
اگر جواب شما نمی‌تواند است باز هم در اشتباه هستید !
به نظرتان اگر کاربر به‌جای مقادیر farsi و یا english مقداری زیرکی بخرج دهد و عباراتی مثل زیر را وارد نماید چه خواهد شد؟ عبارتی مانند:

.../.../.../.../.../.../.../.../.../page

نظرتان چیست؟ ( کلمه page نام یکی از فایل‌ها دلخواه با پسوند php می‌باشد) به این ترتیب کاربر میتونه با عبارت /... بین شاخه‌های هاست شما حرکت رو به عقب داشته باشد و یا با بدست آوردن نام شاخه‌ها و فایل‌های هاست شما حرکت رو به جلو داشته باشد به این صورت که با تعدادی /... به شاخه اصلی یعنی root خواهد رسید و بعد از آن آدرس دلخواه خود را وارد می‌کند و به راحتی در بین شاخه‌های سایت شما حرکت خواهد کرد!!! و حتی می‌تواند به فایل‌های بسیار مهم و حیاتی هاست شما مانند config و یا passwd که در سی پنل موجود است دسترسی پیدا کند و ....  اما خوب شما ممکنه بگید فقط می‌تونه به فایل‌هایی با پسوند php دسترسی پیدا کند نه هر فایل دلخواهی مثل passwd و غیره ولی باز هم در اشتباه هستید!! می‌پرسید چطور؟

ادامه آموزش در صفحه‌ی دوم ...


صفحات مقاله: صفحه 1 | صفحه 2 |




ارسال سؤال یا نظر


1- :
بوسیله: , در: Tuesday, 2012 November 20-کد: 5388
عااااااااااااااااااااااااااااااالی بود مرسییییییی


2- :
بوسیله: , در: Tuesday, 2012 November 20-کد: 5389
عااااااااااااااااااااااااااااااالی بود مرسییییییی


3- amir:
بوسیله: mafia1990, در: Sunday, 2013 September 08-کد: 7910
tnx


4- saeid programmer:
بوسیله: , در: Tuesday, 2013 September 10-کد: 7928
سلام دوست عزیر
فکر نمی کنم کسی طراح سایت باشه و از این اشتباهات انجام بده
این بدترین حالت ممکن است که در سایتی زبان توسط combo box گرفته شود. اما به هر حال از این که زحمت کشیدید و مطالب رو تایپ کردید ممنونم.
اما در کل این مطالب شما صحت دارد و شاید که نه حتماً سایت هایی که هک می شوند از این قبیل حفره ها زیاد دارند!


5- saeid programmer:
بوسیله: , در: Tuesday, 2013 September 10-کد: 7929
سلام دوست عزیر
فکر نمی کنم کسی طراح سایت باشه و از این اشتباهات انجام بده
این بدترین حالت ممکن است که در سایتی زبان توسط combo box گرفته شود. اما به هر حال از این که زحمت کشیدید و مطالب رو تایپ کردید ممنونم.
اما در کل این مطالب شما صحت دارد و شاید که نه حتماً سایت هایی که هک می شوند از این قبیل حفره ها زیاد دارند!


6- saeid programmer:
بوسیله: , در: Tuesday, 2013 September 10-کد: 7930
سلام دوست عزیر
فکر نمی کنم کسی طراح سایت باشه و از این اشتباهات انجام بده
این بدترین حالت ممکن است که در سایتی زبان توسط combo box گرفته شود. اما به هر حال از این که زحمت کشیدید و مطالب رو تایپ کردید ممنونم.
اما در کل این مطالب شما صحت دارد و شاید که نه حتماً سایت هایی که هک می شوند از این قبیل حفره ها زیاد دارند!


7- اسماعیل:
بوسیله: , در: Saturday, 2013 October 12-کد: 8204
عالی بود ... دستتون درد نکنه ... ممنون

Tutorials ©