اجرای امن کد ناشناس با داکر سندباکس
خلاصهٔ کاملتر
پکیج متنباز docker-sandbox از Sharryy یه جواب سرراست برای مسئلهٔ قدیمی «چطور کد ناشناس رو اجرا کنم بدون اینکه سرورم رو از دست بدم» جلوی توسعهدهندههای PHP میذاره. نکتهٔ فنیش اینه که بهجای صدا زدن دستور docker تو شل، مستقیم با Docker Engine API روی سوکت یونیکس یا TCP/TLS حرف میزنه. برای استفاده به PHP 8.3 به بالا، افزونهٔ cURL و دسترسی به یه دیمن داکر نیاز داری.
کار باهاش واقعاً کوتاهه؛ یه نمونه از Sandbox میسازی و کد رو بهش میدی:
use Sharryy\Docker\Sandbox;
$sandbox = new Sandbox();
$result = $sandbox->php('<?php echo 2 + 2;');
$result->output(); // "4"
$result->exitCode(); // 0متدهای python() و node() هم از همون اول آمادهن و با Sandbox::register() میتونی پرست دلخواه خودت — مثلاً Ruby — رو اضافه کنی؛ هر پرست فقط ایمیج، اسم فایل و مفسر رو میگیره. خروجی هر اجرا یه شیء ExecutionResult هست که output()، errorOutput()، exitCode()، successful()، timedOut()، oomKilled() و duration() رو در اختیارت میذاره.
چیزی که پکیج روش مانور میده اینه که امن بودن حالت پیشفرضه، نه یه گزینهٔ اضافه. هر اجرا داخل کانتینری انجام میشه که شبکه نداره، با کاربر غیرروت بالا میاد، فایلسیستم ریشهش فقطخواندنیه (فقط یه /tmp کوچیک روی tmpfs نوشتنیه)، همهٔ قابلیتهای لینوکسی ازش گرفته شده، no-new-privileges داره، swap نداره و سقف تعداد پردازه براش تعیین شده تا یه fork bomb نتونه هاست رو بخوابونه. تایماوت هم کد سرکش رو میکشه و کانتینر رو پاک میکنه.
بیرون از سندباکس هم یه بیلدر روان برای کانتینرهای معمولی داره: withMemoryLimit()، withCpuLimit()، withPidsLimit()، asReadOnly() و بقیه، بهعلاوهٔ مدیریت ایمیج، شبکه و والیوم و امکان جابهجایی فایل به داخل و بیرون کانتینر. اینجا سختگیریهای امنیتی اختیارین و خودت فعالشون میکنی. پکیج روی لینوکس و مک توسعه و تست شده و ویندوز پشتیبانی نمیشه.
نکات کلیدی:
- API روان PHP برای اجرای کد نامطمئن داخل کانتینر ایزوله
- ارتباط مستقیم با Docker Engine API، بدون فراخوانی CLI داکر
- پیشفرض امن: بدون شبکه، کاربر غیرروت، فایلسیستم فقطخواندنی و سقف پردازه
- پرست آمادهٔ PHP، Python و Node بهعلاوهٔ امکان ثبت پرست دلخواه
- نیازمند PHP 8.3+ و دیمن داکر؛ فقط روی لینوکس و مک




