گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

از کجا بفهمیم یک سایت از چه سیستم عامل ،‌ سرویس دهنده وب و زبان برنامه نویسی استفاده میکنه ؟

نویسنده:
6 آگوست 15

یکی از مباحثی که در انجمن‌ها و جوامع برنامه نویسان وب مطرح هست این موضوعه که چه وب سایت‌های موفقی از زبان برنامه نویسی مورد علاقه من استفاده میکنند !؟ گذشته از اینکه این سؤال به نظر من اصلاً مهم نیست چون من دوستان برنامه نویس موفقی دارم که از 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 تولید میکنه.