یکی از مباحثی که در انجمنها و جوامع برنامه نویسان وب مطرح هست این موضوعه که چه وب سایتهای موفقی از زبان برنامه نویسی مورد علاقه من استفاده میکنند !؟ گذشته از اینکه این سؤال به نظر من اصلاً مهم نیست چون من دوستان برنامه نویس موفقی دارم که از Scala برای توسعه وب استفاده میکنند در حالی که پروژه خیلی موفق و دهن پر کنی هم در موردش وجود نداره در عوض میشه این موضوع را بهانه قرار داد تا یاد بگیریم چطور میشه خیلی ساده تشخیص داد یک سایت از چه سیستم عامل ، سرویس دهنده وب و زبان برنامه نویسی استفاده میکنه.
شاید اولین اشتباه در نگاه اول به یک سایت این باشه که از روی پسوند فایلها استنباط کنیم که از چه زبان برنامه نویسی و سیستم عامل و … داره استفاده میشه که البته خیلی قابل اطمینان نیست چون واقعاً براحتی از طریق یک فایل htaccess. روی سیستم عامل لینوکسی میشه فایلها با پسوند aspx را دوباره نویسی (URL Rewriting) کرد یا حتی از سرویس دهنده وب بخوایم پسوند aspx را به عنوان یک پسوند معتبر برای PHP فرض کنه.
من نمیخوام وارد بحثهای کارآگاهی و تخصصی شبکه و بررسی پورت های سرویس دهنده و موارد پیچیده بشم. موردی هم که میخوایم از طریقش بررسی را انجام بدیم توسط یک مدیر سرور قابل دستکاریه که یک نمونه هم معرفی میکنم اما عموما این اتفاق نمیفته و از طریق Header هایی که سرویس دهنده میفرسته میشه فهمید اون پشت چه خبره !
دستوری که میخوایم ازش استفاده کنیم خیلی سادست ، مثلاً بیاین سایت digikala.com را بررسی کنیم :
curl -s -I digikala.com
که این خروجی را بر میگردونه :
HTTP/1.1 301 Moved Permanently Content-Length: 147 Content-Type: text/html; charset=UTF-8 Location: http://www.digikala.com/ Server: Microsoft-IIS/7.5 X-Powered-By: ASP.NET Date: Wed, 05 Aug 2015 22:53:37 GMT
که ازش متوجه میشیم داره از سیتم عامل ویندوز ، IIS7.5 به عنوان سرویس دهنده و زبان ASP .NET استفاده میکنه.
اما همیشه هم نمیشه ۱۰۰ درصد در مورد یک یا چند مورد از سوالاتمون اطمینان حاصل کنیم ، مثلاً خروجی سایت Ponisha.ir :
HTTP/1.0 200 OK Date: Wed, 05 Aug 2015 22:59:54 GMT Server: Apache/2 X-Powered-By: PHP/5.5.27 Set-Cookie: PonishaSession=kbt88b72ms7p9nk2l9bpnqiiu7; path=/; domain=.ponisha.ir Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: User-Agent Content-Type: text/html Connection: close
مشخصه که سرویس دهنده Apache هست و زبان برنامه نویسی PHP 5.5 اما با اطمینان نمیتونیم بگیم داره از سرویس دهنده لینوکسی استفاده میکنه چون روی ویندوز هم قابل استفاده هست اما در حالت نرمال و حرفهای ۹۵ درصد میشه اطمینان داشت سیستم عامل از خانواده لینوکس یا یونیکس هستش.
همونطور که گفتم مدیر سیستم میتونه این اطلاعات را دستکاری کنه ، مثلاً خروجی mihanblog.com را اگه ببینید :
HTTP/1.0 200 OK Date: Wed, 05 Aug 2015 23:04:46 GMT Content-Type: text/html Set-Cookie: mib_lb_id=m0; path=/; domain=.mihanblog.com Cache-Control: no-cache, must-revalidate, no-cache="Set-Cookie", private Vary: Accept-Encoding Server: Toofun/1.0.1 Connection: close
هموطنر که میبینید تنها موردی که برمیگردونه سرویس دهنده هست که اون را Toofun معرفی میکنه اما من که چنین سرویس دهنده ای را نمیشناسم اما گویا سایتهای cloob.com و aparat.com هم چنین خروجیی را بر میگردونه (به نظر میاد مالک همشون یک گروه باشه) اما با کمی مطالعه دقیقتر و مراجعه به آرشیو های سایتهای موجود و دیدن ردپای nginx میشه حدس زد شاید Forky ی از اون باشه اما نمیشه صد در صد گفت.
یادتونه گفتم به پسوند فایلها اعتماد نکنید ؟ خوب اگه خروجی سایت بانک ملت را ببینیم :
HTTP/1.0 301 Moved Permanently Cache-Control: private Content-Length: 150 Content-Type: text/html; charset=utf-8 Location: http://bankmellat.ir/default.aspx Server: Apache/2.2.3 (Linux/SUSE) Date: Wed, 05 Aug 2015 23:11:28 GMT Connection: close
داره میگه سرویس دهده Apache روی لینوکس SUSE اما پسوند فایل Header مربوط به Location که داره Redirect میکنه aspx هست. استنباط اینکه داره برای گمراهی پسوند را عوض میکنه خیلی قویتر از این هست که فکر کنیم IIS داره خروجی گمراهکننده برای جا زدن خودش به عنوان Apache تولید میکنه.
یه راه ساده تر هم وجود داره …
سایت : http://www.woorank.com
آدرس سایت میدی خروجی میگیری …. به همین راحتی
شاید کاملا متوجه منظور من نشدین. من توی اطلاعاتی که این سایت میده اثری از اینکه از چه زبان سمت سرور یا چه سیستم عاملی استفاده کرده ندیدم. اما سایت جالبی بود.