توسعه بکاند و حل چالش ها
امکان خرید نامحدود و رایگان

در حین بررسی در یکی از زیرمجموعه های اپلیکیشن اسنپ، متوجه یک آسیبپذیری حیاتی در منطق فرآیند خرید شدم. این ضعف به کاربر اجازه میداد تا بتواند به صورت نامحدود و رایگان از خدمات استفاده کند. چالش اصلی، مستندسازی دقیق این آسیبپذیری به شکلی بود که برای تیم امنیت اسنپ کاملاً قابل فهم و بازتولید (reproducible) باشد.

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

در ابتدا، گزارش کامل و فنی از طریق کانال رسمی برنامه باگ بانتی برای تیم امنیت اسنپ ارسال شد. پاسخ اولیه تیم امنیت این بود که با وجود تأیید گزارش، این آسیبپذیری خارج از محدوده پاداشدهی برنامه آنها قرار دارد.
با توجه به شدت بالای آسیبپذیری و تأثیر مالی بالقوه آن بر کسبوکار، تصمیم گرفتم موضوع را مستقیماً از طریق تماس تلفنی نیز پیگیری کنم. پس از تماس با شرکت، به مدیر بخش مربوطه متصل شده و جزئیات کامل فنی و تجاری این ضعف امنیتی را تشریح کردم.
حدود یک هفته پس از این تماس، آسیبپذیری به طور کامل برطرف و فرآیند خرید در اپلیکیشن امن گردید. این تجربه نشان داد که برای مسائل حیاتی، پیگیری مستقیم برای اطمینان از درک کامل موضوع توسط مدیران، کلید اصلی برای رسیدن به نتیجه است.
پلتفرم خدمات فنی آتریناساز

پروژه آتریناساز یک پلتفرم آنلاین برای ارائه خدمات فنی و مهندسی بود. هدف، ساخت یک سایت سریع، امن و قابل توسعه بود. نقش من در این پروژه به عنوان توسعهدهنده جونیور، مشارکت در توسعه بکاند با Django و کمک به مدیریت زیرساخت سرور بود.

چالش API ها و تعامل با فرانت اند
برای تیم فرانتاند، به یک راه سریع و راحت برای دیدن و تست کردن لیست تمام APIهای پروژه نیاز داشتیم.
برای حل این مشکل، از استاندارد OpenAPI استفاده کردم تا مستندات به صورت خودکار از روی کدهای جنگو تولید شوند. این مستندات از طریق یک رابط کاربری تعاملی مثل Swagger UI نمایش داده شد که به توسعهدهنده فرانتاند اجازه میداد هر API را به راحتی تست کند و کارکرد آن را ببیند.

پیادهسازی ویرایشگر متن قدرتمند برای CMS اختصاصی
یکی دیگر از نیازمندیهای پروژه، ساخت یک CMS (سیستم مدیریت محتوا) کاملاً اختصاصی بود. در این CMS، به یک ویرایشگر متن پیشرفته نیاز داشتیم که محتوای ورودی را به صورت HTML استاندارد در دیتابیس ذخیره کند تا تیم فرانتاند بتواند آن را به سادگی و بدون مشکل نمایش دهد.
تحقیق و انتخاب ویرایشگر TinyMCE
پس از بررسی و تست چندین گزینه مختلف مانند CKEditor که با باگها و مشکلاتی همراه بودند، در نهایت ویرایشگر TinyMCE را انتخاب و پیادهسازی کردم. این ابزار به دلیل پایداری بالا، نداشتن باگ، ظاهر بسیار تمیز و قابلیتهای شخصیسازی گسترده، یک راهحل بینقص بود. TinyMCE با موفقیت در پنل ادمین جنگو ادغام شد و تجربه کاربری بسیار خوبی را برای تولیدکنندگان محتوا فراهم کرد.

جانمایی تصاویر در میان متن برای CMS اختصاصی
ویرایشگر متن TinyMCE که انتخاب کرده بودیم، در نسخه رایگان قابلیت آپلود مستقیم و جانمایی تصویر در میان متن را نداشت و فقط لینک تصویر را قبول میکرد. چالش اصلی این بود که یک راهکار سفارشی و کاربرپسند برای ادمین سایت طراحی کنیم تا بتواند به سادگی تصاویر مورد نظر خود را در نقاط مختلف یک مقاله طولانی قرار دهد، بدون اینکه نیاز به کار با URLهای مستقیم یا ویرایش HTML داشته باشد.
طراحی سیستم جانمایی مبتنی بر ترتیب (Order)
پس از تحقیق و همفکری با توسعهدهنده فرانتاند، یک راهکار دو بخشی را پیادهسازی کردیم:
1. در بکاند، یک فیلد جداگانه برای آپلود «تصاویر میانمتنی» ایجاد شد و یک فیلد عددی order (ترتیب) به مدل آن اضافه گردید تا ترتیب نمایش عکسها مشخص شود.
2. منطقی در سیستم طراحی شد که با تشخیص فاصلهها (خطوط جدید) در متن اصلی، تصاویر آپلود شده را به ترتیب order آنها در میان پاراگرافها تزریق (inject) میکرد.
این راهکار به ادمین اجازه میداد تا با کنترل کامل بر ترتیب نمایش، تصاویر را به سادگی در متن قرار دهد و تجربه تولید محتوای بسیار بهتری ایجاد کرد.
پیادهسازی نقشه سایت (Sitemap) برای بهبود SEO
یکی از نیازمندیهای کلیدی پروژه، بهینهسازی سایت برای موتورهای جستجو (SEO) بود. لازم بود که یک نقشه سایت (Sitemap) داینامیک ایجاد شود تا گوگل و دیگر موتورهای جستجو بتوانند به صورت خودکار تمام صفحات و پستهای جدید وبلاگ را پیدا و ایندکس کنند.
استفاده از فریمورک Sitemaps در جنگو
پس از مشورت با متخصصان SEO و تحقیق در مورد بهترین روشها، از فریمورک داخلی و قدرتمند جنگو (django.contrib.sitemaps) برای این کار استفاده کردم. با پیادهسازی این فریمورک، نقشه سایت به صورت خودکار و داینامیک با اضافه شدن هر پست جدید در وبلاگ، بهروزرسانی میشود. این راهحل استاندارد، فرآیند ایندکس شدن محتوای سایت توسط موتورهای جستجو را به طور کامل خودکار و بهینه کرد.


بهبود تجربه کاربری (UX) کارفرما در پنل ادمین جنگو
یکی از مراحل نهایی پروژه، آموزش کار با پنل ادمین جنگو به کارفرما برای مدیریت محتوای سایت بود. با وجود قدرت و انعطافپذیری بالای پنل ادمین جنگو، سادگی کار با آن برای یک کاربر غیرفنی در ابتدا میتوانست چالشبرانگیز باشد و این ریسک وجود داشت که تجربه کاربری مناسبی برای ایشان فراهم نشود.
تمرکز بر آموزش و پایبندی به راهکار استاندارد
در ابتدا، راهحلهایی مانند بازنویسی کامل پنل ادمین یا استفاده از پکیجهای شخصیسازی پیچیده را بررسی کردم. اما پس از تحقیق، به این نتیجه رسیدم که پنل ادمین پیشفرض جنگو به دلیل امنیت، پایداری و قابلیتهای گسترده، بهترین و کارآمدترین راهحل برای یک CMS است.
شناسایی و مقابله با سرقت محتوای وبسایت (Content Theft)
پس از مدتی از آنلاین شدن پروژه، متوجه شدیم که یک وبسایت دیگر، پوسته ظاهری و لوگوی سایت آتریناساز را به طور کامل کپی کرده است. این اتفاق میتوانست به برند کارفرما آسیب زده و کاربران را با ایجاد یک سایت جعلی دچار سردرگمی کند. وظیفه من، تحقیق فنی و پیدا کردن راهی برای حذف سایت متخلف بود.
فرآیند تحقیق و گزارشدهی چندمرحلهای
برای مقابله با این تخلف، یک فرآیند تحقیق و گزارشدهی سیستماتیک را دنبال کردم:
1- بررسی اولیه: ابتدا با کمک همکاران در جامعه دواپس، تأیید کردم که تخلف صرفاً یک کپیبرداری از پوسته استاتیک (HTML/CSS) است.
2- تماس با ثبتکننده دامنه (Registrar): ثبتکننده دامنه متخلف (GoDaddy) شناسایی و گزارش تخلف برای ایشان ارسال شد.
3- تحقیق در مورد سرویسدهنده (Hosting): با بررسی DNS، مشخص شد که سایت متخلف پشت سرویس Cloudflare قرار دارد. پس از ارسال گزارش کپیرایت به Cloudflare، آنها همکاری کرده و اطلاعات دیتاسنتر میزبان را در اختیار ما قرار دادند.
4- تماس با دیتاسنتر: تیکت تخلف برای دیتاسنتر مربوطه ثبت و پیگیریهای لازم انجام شد.
5- گزارش به گوگل (DMCA): به عنوان اقدام نهایی و مؤثر، درخواست حذف سایت متخلف از نتایج جستجوی گوگل بر اساس قانون کپیرایت هزاره دیجیتال (DMCA) ثبت گردید تا از دیده شدن آن در جستجوها جلوگیری شود.


مدیریت وظایف و هماهنگی تیمی
در طول پروژه، نیاز به یک سیستم منسجم برای مدیریت وظایف (Tasks)، اولویتبندی کارها و هماهنگی بین اعضای تیم وجود داشت. چالش اصلی این بود که مطمئن شویم همه اعضای تیم روی مهمترین کارها متمرکز هستند و فرآیند توسعه با وجود چالشهایی مانند ددلاینها و تصمیمگیریهای کارفرما، به صورت روان پیش میرود.
پیادهسازی سیستم مدیریت تسک مبتنی بر ماتریس آیزنهاور
برای حل این مشکل، من مسئولیت هماهنگی و مدیریت وظایف تیم در پلتفرم Taskulu را بر عهده گرفتم. با استفاده از ماتریس آیزنهاور، تسکها را بر اساس چهار دسته (فوری و مهم، غیرفوری و مهم و…) اولویتبندی میکردم تا تیم همیشه روی کارهایی با بالاترین اولویت متمرکز باشد.
این تجربه، فرصتی برای یادگیری و مواجهه با چالشهای واقعی مدیریت پروژه بود؛ از جمله مدیریت ددلاینها، اطمینان از کامل بودن تسکها و کمک به هدایت تیم. همچنین، بخشی از این فرآیند، گفتگو با کارفرما برای رسیدن به تصمیمات فنی منطقی و قابل اجرا بود. در نهایت، با این سیستم و همکاری تیمی، توانستیم پروژه را با موفقیت و عملکردی عالی به پایان برسانیم.
تحلیل یک تصمیم فنی: استقرار دستی در مقابل داکرایز کردن
یکی از تصمیمات کلیدی در فاز نهایی پروژه، انتخاب روش استقرار (Deployment) بود. با توجه به تسلطم بر محیط گنو/لینوکس، در ابتدا پروژه را به صورت دستی و با استفاده از Gunicorn، Nginx و تنظیم مستقیم PostgreSQL روی سرور پیادهسازی کردم. تلاش برای داکرایز کردن پروژه در انتهای کار با خطاهای پیشبینی نشدهای همراه بود که نشاندهنده اشتباه در عدم استفاده از داکر از ابتدای پروژه بود. در نهایت، با در نظر گرفتن محدودیتهای زمانی، تصمیم گرفتم استقرار دستی را برای این پروژه حفظ کنم.
نتیجه و یادگیریها:
هرچند استقرار دستی برای این پروژه خاص به خوبی کار میکند و در صورت بروز مشکل، امکان راهاندازی مجدد سریع آن وجود دارد، اما این تجربه یک درس مهم برای من داشت: اهمیت استفاده از داکر در پروژههای واقعی برای یادگیری عمیقتر.
من معتقدم بهترین و پایدارترین یادگیری در یک محیط عملی و واقعی اتفاق میافتد. عدم استفاده از داکر در این پروژه، یک فرصت از دست رفته برای تقویت این مهارت کلیدی بود. این تجربه، رویکرد من را برای پروژههای آینده تغییر داد و اکنون داکرایز کردن را از همان ابتدای فرآیند توسعه در نظر میگیرم.


حفظ پایداری سایت در زمان محدودیتهای گسترده اینترنت
پس از تحقیق در مورد مزایای CDN در افزایش سرعت و امنیت، تصمیم گرفتم سایت آتریناساز را پشت سرویس Cloudflare قرار دهم. چالش اصلی زمانی رخ داد که به دلیل شرایط خاص (جنگ ۱۲ روزه)، اینترنت دچار محدودیتهای شدید در سطح ملی شد. این محدودیتها باعث از کار افتادن CDNهای خارجی و در نتیجه، از دسترس خارج شدن کامل سایت برای کاربران داخل کشور گردید.
تغییر وضعیت پروکسی Cloudflare و بازگردانی دسترسی
در مواجهه با این بحران و به درخواست کارفرما برای بازگردانی هرچه سریعتر سایت، بلافاصله وضعیت را تحلیل کردم. متوجه شدم که مشکل از سمت سرور اصلی نیست، بلکه از مسیریابی ترافیک از طریق پروکسیهای بینالمللی Cloudflare است که در آن شرایط مسدود شده بودند.
به عنوان راهحل فوری، وارد تنظیمات Cloudflare شدم و حالت پروکسی (Proxy mode) را غیرفعال کرده (تغییر به DNS Only) و دامنه را مستقیماً به IP اصلی سرور متصل کردم. با حذف این واسطه خارجی، سایت در شبکه داخلی دوباره قابل دسترس شد.
نتیجه:
با این اقدام سریع، وبسایت آتریناساز یکی از معدود سرویسهایی بود که در آن شرایط بحرانی، فعال باقی ماند و به کاربران خود سرویسدهی میکرد. این تجربه، درک عمیقی از نحوه عملکرد CDNها، DNS و تأثیر زیرساختهای شبکه بر پایداری یک سرویس آنلاین به من داد.