~2 دقیقه مطالعه • بروزرسانی ۹ دی ۱۴۰۴
1. معرفی Permission Model
با اجرای Node.js همراه با فلگ --permission، دسترسی به منابعی مانند فایل سیستم، شبکه، پردازشهای فرزند، worker threads، افزونههای بومی، WASI و inspector محدود میشود.
$ node --permission index.js Error: Access to this API has been restricted
2. Runtime API
هنگام فعالسازی مدل دسترسی، ویژگی process.permission اضافه میشود که شامل متد has() برای بررسی دسترسیهاست:
process.permission.has('fs.write'); // true
process.permission.has('fs.read', '/home/protected'); // false
3. دسترسی فایل سیستم
بهطور پیشفرض دسترسی به فایل سیستم محدود میشود. برای اجازهٔ خواندن یا نوشتن میتوان از فلگهای زیر استفاده کرد:
--allow-fs-read=*: اجازهٔ خواندن همهٔ مسیرها.--allow-fs-write=/tmp/: اجازهٔ نوشتن در پوشهٔ /tmp.- پشتیبانی از wildcard:
--allow-fs-read=/home/test*.
4. استفاده با npx
برای فعالسازی مدل دسترسی هنگام اجرای اسکریپت با npx میتوان از --node-options استفاده کرد:
npx --node-options="--permission" package-name
برای جلوگیری از خطای FileSystemRead باید دسترسی به مسیرهای node_modules یا cache داده شود.
5. محدودیتها
- مدل دسترسی به worker threads ارث نمیرسد.
- ویژگیهایی مانند native modules، شبکه، child process، فایل سیستم، WASI و inspector محدود میشوند.
- برخی فلگها مانند
--env-fileیا--openssl-configقبل از مقداردهی محیط اجرا میشوند و تحت قوانین Permission Model نیستند. - استفاده از file descriptorهای موجود میتواند مدل دسترسی را دور بزند.
6. مشکلات شناختهشده
- لینکهای نمادین (symlinks) حتی اگر خارج از مسیرهای مجاز باشند دنبال میشوند.
- لینکهای نسبی ممکن است دسترسی به فایلها و پوشههای دلخواه بدهند.
نتیجهگیری
مدل دسترسی در Node.js ابزاری قدرتمند برای کنترل منابع در زمان اجراست. این مدل برای جلوگیری از تغییرات ناخواسته طراحی شده اما امنیت کامل در برابر کدهای مخرب ارائه نمیدهد. توسعهدهندگان باید با دقت مسیرهای مجاز را مشخص کنند و از محدودیتها و مشکلات شناختهشده آگاه باشند.
نوشته و پژوهش شده توسط دکتر شاهین صیامی