این پروژه عمداً روی موارد امنیتی زیر تمرکز دارد:
قبل از هر عملیات (fetch / render / createSession)، URL بررسی میشود:
- فقط
http/https - عدم پذیرش
username/passwordداخل URL - کنترل allowlist بر اساس hostname
- پشتیبانی از wildcard به شکل
*.example.com
- پشتیبانی از wildcard به شکل
- DNS resolve و جلوگیری از resolve شدن به IPهای داخلی/رزرو شده
- private, loopback, linkLocal, uniqueLocal, CGNAT, reserved, multicast, unspecified
کد مرتبط:
/workspace/backend/src/security/ssrf.ts
در render و session:
context.route("**/*", ...)برای هر request اجرا میشود- اگر URL آن request خارج از allowlist باشد، request
abortمیشود
کد مرتبط:
/workspace/backend/src/modes/renderMode.ts/workspace/backend/src/sessions/sessionManager.ts
HTML خروجی برای نمایش به کلاینت:
- rewrite کردن src/href به absolute
- sanitize با
sanitize-html(حذفscriptو handlerهایon*و …)
کد مرتبط:
/workspace/backend/src/modes/renderMode.ts
- در محیط تولید:
ALLOWLIST_ALLرا هرگز روشن نکنید. - allowlist را محدود و دقیق تعریف کنید.
- نرخ فریم stream را محدود نگه دارید (پیشفرض 5fps، سقف 15fps).
- اگر قرار است این سرویس به اینترنت عمومی متصل شود:
- احراز هویت روی WS/HTTP اضافه کنید (مثلاً token)
- rate limit و محدودیت همزمانی قرار دهید