PDA

View Full Version : سرقت Machine.Config از هاست!



Behrouz_Rad
دوشنبه 09 مهر 1386, 12:53 عصر
شاید مرسوم نباشه که نکاتی از این دست به صورت عمومی منتشر بشن اما چون گاها برنامه نویسان ممکنه با مشکلاتی مواجه بشن که در ظاهر توضیحی منطقی برای مشکلشون وجود نداره و این مورد نیز یکی از اون نکات هست، بیان اون رو جایز میدونم. اما به قول معروف: !!!USE AT YOUR OWN RISK

در یکی از پروژه هایی که بر روی اون کار میکردم، نیاز به آپلود فایل هایی با حجمی بین 5 تا 7 مگابایت بود. همون طور که احتمالا میدونید، ASP.NET به طور پیش فرض اجازه ی آپلود فایل هایی با حجم بیش از 4 مگابایت رو نمیده. برای رفع این محدودیت میتونید در Web.Config با تنظیم خاصیت maxRequestLength تگ httpRuntime به مقدار مورد نظر حداکثر اندازه ی Request رو مشخص کنید...
من این کار رو انجام داده بودم و در ظاهر نباید مشکلی پیش می آمد اما پس از آپلود فایل، پس از چند لحظه ارتباط با سرور قطع میشد و در IE پیغام "The page cannot be displayed" و در Firefox پیغام "Connection was Reset" نمایش داده میشد.
چند فایل با حجم های متفاوت رو بررسی کردم و در نهایت متوجه شدم که حداکثر حجم فایلی که می تونم آپلود کنم، 2 مگابایت بیشتر نیست!
با هاست (که اتفاقا یکی از هاست های معروف ایرانی هست) تماس گرفتم و اونها اظهار بی اطلاعی کردند و تیم فنی در مورد httpRuntime در Web.Config گفت و من هم گفتم که قبلا این کار رو انجام دادم... خلاصه اینکه از هاست به نتیجه ای نرسیدم!
در نهایت از خود NET. کمک گرفتم...!
همون طور که میدونید، فایل Machine.Config قلب پیکربندی تمامی پروژه هایی هست که بر روی هاست قرار میگیرن. اما برنامه نویس این امکان رو داره تا برخی از تنظیمات مورد نیاز پروژش رو از طریق Override کردن برخی از تگ های Machine.Config در فایل Web.Config اش مطابق با میل خودش تطبیق بده.
اما این امکان برای Machine.Config نیز وجود داره که اجازه نده پروژه ها بتونن برخی تنظیمات اون رو Override کنن!
بدین منظور کافیست یک تگ location با خاصیت allowOverride برابر با false در Machine.Config قرار بگیره و قسمتی رو که مایل نیستید توسط Web.Config پروژه ها Override بشه در این قسمت قرار بدید.
من احتمال دادم که هاست این کار رو انجام داده... اما برای اثبات این موضوع نیاز به دیدن محتویات فایل Machine.Config هاست هست!...
خوشبختانه ASP.NET 2.0 این امکان رو در اختیار شما قرار داده!!!
فایل Machine.Config در مسیر ذیل وجود داره:


C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONF IG

متد OpenMachineConfiguration کلاس WebConfigurationManager این کار رو برای شما انجام میده!
برای دسترسی به مسیر فوق باید مجوز Read داشته باشید... از اونجایی که پروژه ی شما در پشت صحنه تنظیماتش رو از این فایل میخونه، در اکثر موارد اجازه ی دسترسی به این مسیر برای پروژه ها وجود داره... البته میشه از دسترسی به این مسیر جلوگیری کرد اما بخش فنی هاست ها اکثرا از این نکته غافل هستند...
نهایتا من به شکل ذیل فایل Machine.Config هاست رو به دست آوردم:


[code]
Dim mConfig As System.Configuration.Configuration
mConfig = System.Web.Configuration.WebConfigurationManager.O penMachineConfiguration()
mConfig.SaveAs(Server.MapPath(".") & "\my_Host_Machine_Config.xml")

و بعد از باز کردن فایل، قسمت ذیل رو دیدم:


<location allowOverride="false">
<system.web>
<httpRuntime maxRequestLength ="2048" executionTimeout ="90"/>
</system.web>
</location>

و بدینگونه بود که هاست رسوا شد!

فایل Machine.Config هاست رو از ذیل میتونید دانلود کنید.

موفق باشید.