روزمرگی فنی
روزمرگی فنی
خواندن ۳ دقیقه·۳ سال پیش

مقابله با کارفرمای بدحساب: معرفی یک پلاگین و آنالیز آن!

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

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

منطق و طرز کار افزونه خیلی ساده است:

شما n روز به کارفرما مهلت تسویه می‌دهید. به ازای گذشت هر روز، 1/n از opacity بدنه سایت کم می‌شود و به عبارتی صفحه شفاف‌تر می‌شود تا آنکه با پایان مهلت مقرر، opacity به صفر می‌رسد و حالا تنها چیزی که کاربر می‌بیند یک صفحه سفید است! در این حالت نه کدی حذف شده و نه داده‌ای، بلکه فقط چیزی که هست دیده نمی‌شود. همین. در نتیجه این روش نمی‌تواند مشکل حقوقی یا منع قانونی هم داشته باشد.

محیط کاربری افزونه: تعیین زمان آغاز و مهلت تسویه حساب
محیط کاربری افزونه: تعیین زمان آغاز و مهلت تسویه حساب


اما نصب افزونه به دو دلیل ایده خوبی نیست: یکی اینکه شناسایی و غیرفعال‌سازی‌اش کار ساده‌ای است (مگر اینکه کارفرما خیلی از این وادی‌ها پرت باشد!) و دیگری اینکه اصلا ممکن است شما از سیستم مدیریت محتوای وردپرس استفاده نکنید.

پس به جای افزونه، می‌توان مستقیما از اسکریپتی استفاده کرد که مبنا و هسته اصلی افزونه را شکل می‌دهد (کد اسکریپت از اینجا قابل دسترسی است).

در اینجا تنها با دو خط اول کد سروکار دارید: یعنی تعیین دستی زمان آغاز (due date) و مهلت مقرر (deadline). حالا با داشتن این کد تنها کاری که باقی می‌ماند اینست که آن را بین تگ‌های اسکریپت بگذارید و قبل از تگ بسته </body> سایت قرار بدهید (چرا اینجا؟ چون برای اینکه اسکریپت عمل کند، نیازمند آنست که قبلش body لود شده باشد. پس اگر هم ترجیح می‌دهید اسکریپت را جای دیگری بگذارید، یک ویژگی تعویق یا defer برایش تعریف کنید تا حتما بعد از لود body اجرا بشود).

اگر علاقه ندارید یک تغار کد در صفحه قرار بدهید و می‌خواهید فضای کمتری را اشغال کند، راه ساده‌اش اینست که ابتدا کد بالا را در قالب یک فایل جاوا اسکریپت ذخیره کنید (مثلا به اسم deadline.js)؛ بعد فایل را از طریق کنترل پنل در جایی از فضای هاست قرار بدهید (ترجیحا در فولدرهایی غیر از فولدرهای وردپرس تا با بروزرسانی وردپرس حذف نشود) و نهایتا با داشتن مسیر فایل آن را فراخوانی کنید؛ یعنی:

روش دیگر برای اینکه یک مقدار کار حرفه‌ای‌تر به نظر برسد اینست که کدها را مبهم و پیچیده کنید (obfuscate) تا برای کاربر انسانی قابل فهم نباشد. برای این مورد خیلی ساده می‌شود از ابزارهای آنلاین مثل Obfuscator استفاده کرد. به این ترتیب اسکریپت بالا را می‌دهید و نسخه مبهم‌شده‌اش را فوری تحویل می‌گیرید. به این شکل:

اما حالا اگر احیانا از این روش برای باج‌گیری روی سایت شما استفاده شده باشد چطور؟ خب خیلی ساده باید مراحل بالا را معکوس کرد. یعنی افزونه را غیرفعال یا کد مربوطه را در سایت پیدا و حذف کرد. اگر هم به هر دلیل موفق به یافتن کد نشدید، شما هم می‌توانید رکب بزنید و برای بی‌اثر کردن کد بالا اسکریپت زیر را به قبل از تگ بسته </body> اضافه کنید:

(() => {document.body.style.opacity = 1;})()

به این صورت:

با این روش opacity صفحه در هر حال به 1 برمی‌گردد و محتوا نمایش داده می‌شود، حتی اگر کد باجگیر در جای خودش باقی بماند.

وندا نوژن

پ.ن. این مطلب صرفا جنبه آموزشی داشت و مسئولیت استفاده از این روش بر عهده استفاده‌کننده‌اش است :)

کارفرمای بدحسابوردپرسجاوا اسکریپتپلاگینپلاگین وردپرس
روزها درگیر مصائب فنی، شب‌ها مشغول ثبت راه‌حل‌های یافتنی
شاید از این پست‌ها خوشتان بیاید