گیک فارسی

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

دانلود همه فایل‌های یک وب سایت از طریق FTP

نویسنده:
10 دسامبر 16

اگه توسعه‌دهنده وب باشین خیلی مواقع پیش میاد که نیاز دارین همه فایل‌های یک وب سایت را دانلود کنین. اگه سایت مورد نظر روی میزبانی واقع باشه که Cpanel یا کلاً یک Filemanager داشته باشه میتونید یک نسخه Zip شده از فایل‌ها بگیرین.

اما این فقط توی سناریو‌هایی جواب میده که حجم سایت خیلی بزرگ نشه. اگه حجم به گیگابایت برسه احتمال داره اصلاً اسکریپت Timeout بشه یا به خاطر عدم پشتیبانی از Resume و عدم وجود حجم کافی برای پشتیبان گیری روی دیسک به مشکل بخورین. سناریو‌هایی هم هست که سایت روی یک VPS قرار داره و پنل مدیریتی هم وجود نداره. یا کلاً جز FTP چاره دیگه‌ای نداریم.

یکی از دلایلی که به لینوکس علاقه دارم این هست که ابزار بسیار قدرتمندی داره و خیلی منعطف میشه به هدفت برسی. توی این سناریو با دستور زیر خیلی راحت همه فایل‌ها دانلود میشن و کار ختم به خیر میشه.

wget -r -l 0 --user="username" --password="password" ftp://server.com/

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

نویسنده:
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 تولید میکنه.

از دسترس خارج کردن موقتی سایت جهت بروزرسانی

نویسنده:
17 اکتبر 14

اگه تا حالا ساخت و پشتیبانی وب سایتی را بر عهده گرفته باشین یکی از مواردی که حتماً باهاش روبرو شدین اینه که قصد بروزرسانی سایت را دارین و جهت انجام تغییرات و بررسی درستی آن نیاز به چند ساعت کار هست و در این حین نباید کسی روی سایت فعالیتی داشته باشه.

به این عملیات که بهش بروزرسانی یا رفع مشکلات یا Maintenance گفته میشه بایستی سایت را از دسترسی دیگران البته بجز خودمون خارج کنیم. اما چطوری :

این کار هم مثل خیلی کار های دیگه یک راه حل ثابت و مشخصی نداره ، اما اصولی‌ترین راهی که دیدم و ازش استفاده میکنم این هست که یک فایل با توضیحات مربوط به عملیاتی که انجام میدیم روی سرور ایجاد کنیم و توی فایل htaccess. بگیم اگه کسی فایلی غیر از این فایل را درخواست کرد و ip وی هم مربوط به ما نبود بفرستش به صفحه مورد نظر ما.

پس فایل htaccess. این خواهد بود :

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$

RewriteCond %{REQUEST_URI} !^/maintenance\.php$
RewriteRule ^(.*)$ maintenance\.php [L]

توجه : فراموش نکنید که ip خودتون را با xxx های خط دوم عوض کنید.

و فایل maintenatnce.php هم این خواهد بود :

<?php
  header('HTTP/1.1 503 Service Temporarily Unavailable',true,503);
  header('Status: 503 Service Temporarily Unavailable');
  header('Retry-After: 43200');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
  <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
  <title>Site Maintenance</title>
</head>
<body>
  <h1>Maintenance</h1>
  <p>The website is under maintenance at present.</p>
</body>
</html>

حالا با خیال راحت میتونیم تغییر و تحولات مد نظرمون را بدون مزاحم انجام بدیم.