لوکوموتیو
لوکوموتیو

@Loc0m0

15 تغريدة 8 قراءة Sep 07, 2024
یه بنده‌خدایی یک ماه پیش یه وبسایت بامزه ساخته بوده به اسم One Million Checkboxes که توش فقط یک میلیون‌تا چک‌باکس داشته. تنها نکته‌ش هم این بوده که هر یوزری که یه باکس رو چک/آن‌چک می‌کرده، برای همه تغییر می‌کرده!
اتفاقات بعدش بامزه‌س... 😅👇
برخلاف تصورش که این یه پروژه سرگرمی بامزه بوده، این وبسایت یهو می‌زنه و معروف می‌شه و ۵۰۰هزار تا یوزر میاره که ۶۵۰ میلیون بار چک‌باکس‌ها رو عوض می‌کنن و حتی خبرش توی نیویورک تایمز و واشینگتن پست هم می‌ره!
[1] nytimes.com
[2] washingtonpost.com
برای این‌که این اطلاعات (یک میلیون صفر یا یک) رو سریع بتونه به یوزرهای آنلاین بده، اومده برای هر چک‌باکس یه بیت درنظر گرفته و کل دیتا رو در ۱۲۵هزار بایت (۱۲۵کیلو بایت) منتقل می‌کرده، که تقریباً سایز یه عکس معمولیه.
از نظر فنی هم اینا رو base64-encoded توی Redis نگه می‌داشته.
خلاصه، بعد چند روز یهو میاد این دیتا رو (یه مشت صفر ویک) به‌صورت بایت‌های کاراکترهای ASCII در قالب یه کپی از دیتابیس ببینه که یهو می‌بینه: عه! وسطش یه آدرس وبسایت اومده!
و پشمای طرف در جا می‌ریزه که یا خدا، هک شده‌ام و به فنا داریم می‌ریم! یکی تونسته یه آدرس اینترنتی توی دیتابیس ما بذاره و خدا می‌دونه توش چی هست و چند تا یوزر بدبخت دارن به فنا می‌رن!
خلاصه، شروع می‌کنه لاگ‌های سرور رو گشتن و دیدن این‌که کی از کجا با چه IP ای تونسته به سرورش نفوذ کنه و دیتابیس رو این شکلی مورد عنایت قرار بده!
اما چیزی پیدا نمی‌کنه و بیشتر متعجب می‌شه و تا مرز سکته هم می‌ره =)) تا این‌که یه کم توجه می‌کنه و می‌بینه «عاقاااااا....»
یه نفر نشسته بوده تک‌تک کاراکترهای URL مربوطه رو به‌صورت کدهای ASCII صفر و یک کرده [3] و با ظرافت همه رو دونه دونه یه جای این یه میلیون‌تا خونه گذاشته! و بعد هم منتظر مونده ببینه کی این کد رو دیکُد می‌کنه و این آدرس رو پیدا می‌کنه!
[3] fa.wikipedia.org
خلاصه، یارو یه کم مشکوک می‌شه و خلاصه یه گوگلی می‌کنه و دل رو به دریا می‌زنه (یحتمل توی یه سندباکس) و می‌ره به آدرس اون URL و می‌بینه که یه دکمه داره توش و یه لینک به یه سرور دیسکورد (گروه خصوصی چت گروهی) هست!
خلاصه، این بابای سازنده وبسایت (eieio) هم می‌ره تو چت و می‌بینه یه ۲۰ نفری دور هم جمع هستن. اینم می‌گه «یالله! بنده سازنده وبسایت هستم. خوبین؟» و یکی هم بهش می‌گه «به به! خوش اومدی اوستا!» 😂
بعد بهش می‌گن «حاجی وبسایتت رو به‌صورت ۱۰۰۰ در ۱۰۰۰ از دور دیدی؟»
(نکته اینه که طرف این یک میلیون تا خونه رو به‌صورت خطی پشت‌سر هم گذاشته بوده و نه یه جدول. و هر کسی بسته به عرض صفحه نمایش خودش، یه شکل مختلف می‌دیده و چیزی به اسم سطر و ستون مفهوم دقیقی نداشته.)
اینم می‌گه «نه والله... به‌صورت ۱۰۰۰ در ۱۰۰۰ از خیلی دور چیه مگه؟»
کاشف به عمل می‌یاد که نه تنها توش URL مخفی بوده، بلکه یه‌سریا توش نقاشی هم کشیده‌ان، لوگو گذاشته‌ن، و حتی QR Code هم چپونده‌ن! 😅
خلاصه این گروهه هی به‌مرور زمان بزرگتر می‌شه و تا قبل از حذف شدنش به ۶۰ نفر هم می‌رسه، شامل یه سری نوجوون بااستعداد و با ذوق!
یه سری هم با اسکریپت (که هر چند میلی‌ثانیه یه عالمه خونه رو عوض کنه) واسه خودشون حتی GIF هم این وسط نمایش می‌داده‌ن! 🤣
خلاصه تهش طرف سایت رو می‌بنده. این وسط هم یه ۸۵۰ دلار هزینه براش برمی‌داره که سرورش بتونه پاسخگو باشه و البته دونیشن‌ها خرجشو داده.
ولی یه کار خیلی قشنگی که کرده اینه که همه این داستان‌ها و یادگیری‌های فنی و تکنولوژیش تو وبسایتش گذاشته و یه ویدیو هم داده:
youtube.com
لینک‌ها:
- داستان اصلی: eieio.games
- بحث تکنیکال و بازنویسی از پایتون به Go و Redis و Scale کردن و اینا:‌eieio.games
و ممنون از نیما (nima101.github.io) که بهم معرفی کرد اینو تا اینجا بذارم براتون!
اینم رشتوی خود طرف:
x.com
پ.ن.۱. اینم رشتوی اولیه‌ی کار طرف هست که تو کامنت‌هاش ملت شاهکاری بامزه‌شون رو گذاشته‌ن. طرف هم اوایل از rate-limit خود Flask استفاده کرده بوده که جلوی خرابکاری رو بگیره، اما بالطبع ملت دورزدنش رو بعدتر انجام داده‌ن! 😅
x.com

جاري تحميل الاقتراحات...