مدل دسترسی (Permissions) در Node.js

مدل دسترسی در Node.js مکانیزمی برای محدود کردن دسترسی پردازش به منابع سیستم است. این مدل به‌صورت یک "کمربند ایمنی" عمل می‌کند تا از تغییرات ناخواسته در فایل‌ها یا استفاده از منابعی که دسترسی به آن‌ها صریحاً داده نشده جلوگیری کند. با این حال، این مدل امنیت کامل در برابر کدهای مخرب ارائه نمی‌دهد.

--permission flagprocess.permission.has()--allow-fs-read / --allow-fs-write--allow-net / --allow-worker / --allow-addons / --allow-wasi

~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 ابزاری قدرتمند برای کنترل منابع در زمان اجراست. این مدل برای جلوگیری از تغییرات ناخواسته طراحی شده اما امنیت کامل در برابر کدهای مخرب ارائه نمی‌دهد. توسعه‌دهندگان باید با دقت مسیرهای مجاز را مشخص کنند و از محدودیت‌ها و مشکلات شناخته‌شده آگاه باشند.


نوشته و پژوهش شده توسط دکتر شاهین صیامی