آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نکته های امنیتی PHP  (متن تمیز شد)

Alireza  10 سال پیش  10 سال پیش
+4 0

ﮔﺎﻫﻲ اوﻗﺎت ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ، از روي ﺗﻨﺒﻠﻲ و ﻳﺎ ﻫﺮ ﻣﺸﻜﻞ دﻳﮕﺮي از آزﻣﻮدن درﺳﺖ و ﻣﺤﻜﻢ ﻣﺘﻐﻴﻴﺮ ﻫﺎ ﭘﺮﻫﻴﺰ ﻣﻴﻜﻨﺪ و  ﺑﺎ اﻧﺠﺎم اﻳﻦ ﻋﻤﻞ  را ه را ﺑﺮاي ﻧﻔﻮذ ﮔﺮان ﺑﺎز ﻣﻴﻜﻨﺪ.ﻣﻌﻤﻮﻻ ﻣﻘﺪار دﻫﻲ  ﺻﻔﺤﺎت ورود و ﺗﻌﻴﻴﻦ ﻫﻮﻳﺖ ﺻﻮرت ﻣﻴﮕﻴﺮد.ﻣﻔﺴﺮ 2 ﻣﺘﻐﻴﺮ ﻫﺎ ﺗﻮﺳﻂ ﻧﻔﻮذ ﮔﺮ ﺑﺮاي دور زدن و ﮔﺎﻫﻲ اوﻗﺎت ﻫﻢ ﭘﺎراﻣﺘﺮ POST و GET ﺑﻪ ﺻﻮرت ﭘﻴﺶ ﻓﺮض ﺛﺎﺑﺖ ﻫﺎﻳﻲ ﻣﺎﻧﻨﺪ PHP ارﺳﺎل ﻣﻴﻜﻨﺪ .اﮔﺮ ﻣﺘﻐﻴﻴﺮ ﻫﺎي ﻛﻪ ﺗﻮﺳﻂ اﻳﻦ HTTP  را ﺗﻮﺳﻂ در ﺧﻮاﺳﺖ ﻫﺎي COOKIE ﻧﻮع در ﺧﻮاﺳﺖ ﻫﺎ ﻣﻘﺪار دﻫﻲ ﻣﻴﺸﻮﻧﺪ ﺑﻪ درﺳﺘﻲ ﻋﺮض ﻳﺎﺑﻲ ﻧﺸﻮﻧﺪ ، ﻣﻴﺘﻮاﻧﻨﺪ ﻓﺮﺻﺖ ﺧﻮﺑﻲ را ﺑﺮاي ﻳﻚ ﻧﻔﻮذ ﺑﻲ ﻧﻘﺺ رﻗﻢ ﺑﺰﻧﻨﺪ.اﻧﺠﺎم اﻳﻦ ﻋﻤﻞ ﺑﺪﻳﻦ ﺻﻮرت اﻧﺠﺎم ﻣﻴﺸﻮد ﻛﻪ ﻧﻔﻮذ ﮔﺮ ﺑﺪون داﻧﺴﺘﻦ رﻣﺰ ﻋﺒﻮر درﺳﺖ ﻣﻴﺘﻮاﻧﻨﺪ ﺻﻔﺤﻪ ﺗﻌﻴﻴﻦ ﻫﻮﻳﺖ را ﮔﻮل زده و ﺧﻮد را ﺑﻪ ﺟﺎي ﻣﺪﻳﺮ ﺟﺎي ﺑﺰﻧﺪ  .

ﺑﻪ اﻳﻦ ﻣﺜﺎل دﻗﺖ ﻛﻨﻴﺪ  :

ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﻣﺸﺎﻫﺪه ﻣﻴﻜﻨﻴﺪ، اﮔﺮ ﺻﻔﺤﻪ را ﺑﻪ ﺻﻮرت ﻋﺎدي اﺟﺮا ﻛﻨﻴﺪ ﺗﻨﻬﺎ ﺑﺎ داﻧﺴﺘﻦ ﻣﻘﺪار درﺳﺖ رﻣﺰ   ﻣﻮاﺟﻪ ﺷﻮﻳﺪ. آﻳﺎ ﻧﻔﻮذ ﮔﺮ  ﻣﻴﺘﻮاﻧﺪ رﻣﺰ "welcome to system"ﻋﺒﻮر ﻣﻴﺘﻮاﻧﻴﺪ ﺑﺎ ﭘﻴﻐﺎم ﻋﺒﻮر را از ﻣﻴﺎن ﻫﺰار ﻫﺎ و ﻳﺎ ﻣﻴﻠﻴﻮن ﻫﺎ رﻣﺰ ﻋﺒﻮر ﺣﺪس ﺑﺰﻧﺪ؟ اﻳﻦ ﻛﺎري ﻏﻴﺮ ﻣﻤﻜﻦ ﺑﻪ ﻧﻈﺮ ﻣﻴﺮﺳﺪ ،  ﻫﺶ ﺷﺪه اﺳﺖ  .اﻣﺘﺤﺎن ﻛﺮدن رﻣﺰ ﻫﺎي ﭘﻴﺎﭘﻲ ﻛﺎري را از MD5 زﻳﺮا رﻣﺰ ﻋﺒﻮر ﺑﻪ ﺗﻮﺳﻂ اﻟﮕﻮ رﻳﺘ ﻢ   Admin ﭘﻴﺶ ﻧﻤﻴﺒﺮد .اﻣﺎ ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﻣﺸﺎﻫﺪه ﻣﻴﻜﻨﻴﺪ ﭘﺲ از ﻣﻘﺪار دﻫﻲ درﺳﺖ رﻣﺰ ﻋﺒﻮر ﻣﺘﻐﻴﻴﺮ  ﻣﻴﺸﻮد و ﺑﺎ اﻳﻦ ﻛﺎر ﻫﻮﻳﺖ ﻣﺪﻳﺮ ﻣﺸﺨﺺ ﻣﻴﺸﻮد و ﭘﺲ ﺑﺮرﺳﻲ اﻳﻦ ﻣﺘﻐﻴﻴﺮ در ﺻﻮرت درﺳﺖ 1ﺑﺮاﺑﺮ  ﻧﺒﻮدن  ("  رﻣﺰ ﻋﺒﻮر 1 ﺑﻮدن  (ﭘﻴﻐﺎم  "ﺑﻪ ﺳﻴﺴﺘﻢ ﺧﻮش آﻣﺪﻳﺪ "   و ﻳﺎ اﺷﺘﺒﺎه ﺑﻮدن  )ﺑﺮاﺑﺮ 1 ﺑﻮدن )ﺑﺮاﺑﺮ درﺳﺖ را وارد ﻛﻨﻴﺪ"    ﺑﺮاي ﺷﻤﺎ ﻧﻤﺎﻳﺶ داده ﻣﻴﺸﻮد.ﺑﺎ ﻛﻤﻲ ﺗﺎﻣﻞ در ﻣﻴﺎﺑﻴﻢ ﻛﻪ ﺗﻨﻬﺎ ﻛﺎري ﻛﻪ ﻧﻔﻮذ ﮔ ﺮ Admin ﺑﻪ ﻣﺘﻐﻴﻴﺮ1ﺑﺮاي ﺷﻨﺎﺳﺎﻧﺪن ﺧﻮد ﺑﻪ ﻋﻨﻮان ﻣﺪﻳﺮ ﺑﺎﻳﺪ اﻧﺠﺎم دﻫﺪ ، دادن ﻣﻘﺪار   اﺳﺖ .

ﺑﺎ اﺳﺘﻔﺎده از اﻳﻦ ﻛﺪﻫﺎ ﺑﻪ راﺣﺘﻲ و ﺣﺘﻲ ﺑﺎ دادن رﻣﺰ ﻋﺒﻮر اﺷﺘﺒﺎه ﻣﻴﺘﻮاﻧﻴﺪ ﺧﻮد را ﺑﻪ ﺟﺎي ﻣﺪﻳﺮ ﺳﻴﺴﺘﻢ  و ﻣﻘﺪار دﻫﻲ ﻣﺘﻐﻴﻴﺮ ﻫﺎ ﻣﻘﺎدﻳﺮي را ﺑﻪ ﺳﻤﺖ ﺻﻔﺤﻪ POST ﺟﺎي ﺑﺰﻧﻴﺪ.اﻳﻦ ﻛﺪ ﺑﺎ اﺳﺘﻔﺎده از روش  اﺑﺘﺪا رﻣﺰ ﻋﺒﻮر ارﺳﺎﻟﻲ را ﺑﺮرﺳﻲ ﻣﻴﻜﻨﺪ و  Login.php ارﺳﺎل ﻣﻴﻜﻨﺪ .ﺻﻔﺤﻪ Login.php  ﻣﻘﺪاري دﻫﻲ  ﻧﻤﻴﮕﺮدد  .در Admin در ﻣﻴﺎﺑﺪ ﻛﻪ ﻣﻘﺪار رﻣﺰ ﻋﺒﻮر اﺷﺘﺒﺎه اﺳﺖ و ﺑﺎ اﻳﻦ ﻛﺎر ﻣﺘﻐﻴﻴﺮ  ﻓﺮض ﻣﻴﺸﻮد .زﻳﺮا ﭘﺲ از 1 ﻣﻮرد ﺑﺮرﺳﻲ ﻗﺮار ﻣﻴﮕﻴﺮد ، و ﺑﺮاﺑﺮ Admin ﺧﻄﻮط ﺑﻌﺪ ﻣﻘﺪار ﻣﺘﻐﻴﻴﺮ  Admin  (در ﻳﻜﻲ از ﺧﻄﻮط ﺑﻪ ﺻﻮرت ﻣﺨﻔﻲ ﻣﺘﻐﻴﺮي ﺑﺎ ﻧﺎم  exploit.php )اﺟﺮا اﻳﻦ ﻛﺪﻫﺎ    ارﺳﺎل ﻣﻴﺸﻮد  .در آن ﺻﻔﺤﻪ ، ﺑﻪ دﻟﻴﻞ ﻣﻘﺪار Login.php  ﺑﻪ ﺧﻮد ﮔﺮﻓﺘﻪ و ﺑﻪ ﺻﻔﺤﻪ 1ﻣﻘﺪار  ﻣﻴﺸﻮد و ﺑﺎ ﭘﻴﻐﺎم 1 ﺑﺮاﺑﺮ Admin ﺗﻮﺳﻂ ﻧﻔﻮذ ﮔﺮ در ﻫﻨﮕﺎم اﺣﺮاز ﻫﻮﻳﺖ Adminدﻫﻲ ﻣﺘﻐﻴﻴﺮ "ﺑﻪ ﺳﻴﺴﺘﻢ ﺧﻮش آﻣﺪﻳﺪ" ﻣﻮاﺟﻪ ﻣﻴﺸﻮﻳﺪ. 

 

این متن ادامه دارد

0 0
شرمنده اگه یکم بد نوشتم خیلی زیاد بود دیگه D: (10 سال پیش)
0 0
این تاپیک مفید به نظر می رسد اما چنانچه تمیز و مرتب و خوانا نباشد، قابل حذف است. (10 سال پیش)
0 0
چشم استاد تمز مینویسم متن بالا رو ، ممنون از یادآوریتون (10 سال پیش)
0 0
این درست نیست. admin$ یک متغیر هست ولی تگ hidden با نام admin زمانی که سند میشه جزو ایندکس های آرایه ی سوپر گلوبال POST_$ هست.یعنی متغیر admin مقدار دهی نمیشه. شما بعد از سند اینو چاپ کنید: print_r($_POST); البته اینجور کد نویسی هم درست نیست چون زمانی که فرد لاگین میشه یک متغیر نمیتونه مورد درسترسی قرار بگیره توو صفحات بعدی و اینجا از کوکی و یا سشن استفاده میشه. در ضمن md5 به این شکل امنیت نداره و با یک حمله ی brute force راحتتر پسورد کشف میشه. (10 سال پیش)
0 0
راستی متن هنوز تمیز نشده :دی (10 سال پیش)
0 0
شرمنده دیگه از این تمیز تر نمیتونستم بنویسم ، چون من این مطالب رو از سایت های مختلف جمع آوری می کنم و در اختیار دوستان قرار میدهم تایپ کردنش خیلی سخته و مجبور هستم paste کنم (10 سال پیش)
0 0
در مورد مطالبی که در این تاپیک نوشتم بررسی زیادی کردم (10 سال پیش)
0 0
تست هم کردید؟ (10 سال پیش)
0 0
کد بالا کامل نیست و فقط یک تیکه از کد را درج کردم که متد post رو نمایش دهد و من یک بار تست کردم کد بالا رو (10 سال پیش)
0 0
شما کد بالا رو تست کردید؟ به چه نتیجه ای رسیدید؟ من خیلی دقیق بررسی نکردم و فقط یک بار تست کردم (10 سال پیش)
0 0
توضیحاتو گفتم بالا. توو کد دوم تگ هیدن اومده واسه مقدار دهی متغیر admin$ ... درسته؟ که admin$ برابر 1 بشه و شرط اجرا بشه! حرف اینجاس که admin$ یک متغیر هست و تگ هیدن با نام admin ایندکس آرایه ی POST_$ هست. این دو متغیر دو چیز جدا از هم هستن. این دو زمانی برابره هم میشه که توو اسکریپت بهم نسبت داده بشن. (10 سال پیش)
0 0
توو کد اول اگه نگاه کنی میبینی چطور متغیر pass$ مقدار دهی شده با ایندکس pass در POST_$... تگ هیدن با نام admin هم مثل تگ پسورد هست. (10 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .