# وضعیت رفع یافته‌های گزارش ممیزی CloudHost > مرجع: `AUDIT-REPORT.fa.pdf` / `scripts/audit-report.fa.html` > آخرین به‌روزرسانی: ۳ تیر ۱۴۰۴ (3 Jul 2026) | نماد | معنی | |------|------| | ✅ | رفع شده | | ⚠️ | جزئی / نیاز به پیکربندی محیط | | 🔜 | عمداً به تعویق افتاده (اسکوپ بزرگ یا trade-off) | --- ## خلاصه | دسته | تعداد | ✅ | ⚠️ | 🔜 | |------|-------|----|----|-----| | بلاکرهای پروداکشن | 8 | 8 | 0 | 0 | | بیلد و Kaniko | 10 | 9 | 0 | 1 | | دیپلوی و پیش‌نمایش | 6 | 6 | 0 | 0 | | دیتابیس / سرویس اختیاری | 9 | 8 | 0 | 1 | | Migration / اسکیما | 4 | 4 | 0 | 0 | | بیلینگ و امنیت مالی | 5 | 5 | 0 | 0 | | GitOps / CI-CD | 4 | 4 | 0 | 0 | | امنیت اپ / auth | 6 | 3 | 0 | 3 | | بهبود / زیرساخت | 5 | 2 | 1 | 2 | **نتیجه:** همه بلاکرهای پروداکشن و تقریباً همه باگ‌های قطعی رفع شده‌اند. موارد باقی‌مانده عمدتاً پیکربندی آینه رجیستری، JWT در localStorage، و پاک‌سازی PVC یتیم هستند. --- ## ۱. بلاکرهای پروداکشن (اولویت ۱–۸) | # | یافته | وضعیت | اقدام | |---|--------|--------|-------| | 1 | شارژ رایگان کیف پول (`POST /billing/wallet/charge`) | ✅ | HMAC + گارد production در `billing-wallet.controller.ts` | | 2 | دیپلوی بدون پرداخت | ✅ | گارد بیلینگ در `triggerDeployment`, `startDeployment`, `PATCH resources` | | 3 | namespace از ۸ کاراکتر UUID | ✅ | `userIdSlug` / `userNamespace` با UUID کامل | | 4 | migration بدون ردیابی نسخه | ✅ | `schema_migrations` + `000_base_schema.sql` + pre-upgrade hook | | 5 | `015` ستون `user_id` / `001` بدون گارد TYPE | ✅ | اصلاح نام ستون + `IF NOT EXISTS` | | 6 | workflow Gitea بدون تست | ✅ | job تست + rebase در `.gitea/workflows/build-deploy.yaml` | | 7 | رمز هاردکد Elasticsearch | ✅ | حذف از git + SealedSecret | | 8 | COPY گو / `\|\| echo` Node | ✅ | اصلاح در `build.service.ts` | --- ## ۲. بیلد (Kaniko + Dockerfile) | یافته | وضعیت | یادداشت | |--------|--------|---------| | Go COPY نامعتبر | ✅ | | | Node build failure نادیده | ✅ | `npm ci` + fail-on-build | | Laravel extensions | ✅ | mbstring, xml, bcmath, zip, fileinfo, tokenizer | | Python pyproject.toml | ✅ | تشخیص + نصب poetry/pdm | | Kaniko 4Gi / PVC بدون SC | ✅ | limits قابل تنظیم + `BUILD_PVC_STORAGE_CLASS` | | Git token در spec / branch injection / SSRF | ✅ | GIT_ASKPASS + Secret + validation | | Zip slip در unzip | ✅ | اعتبارسنجی مسیر قبل و بعد از extract | | state بیلد در حافظه | ✅ | Redis session + startup recovery | | دیپلوی هم‌زمان بدون قفل | ✅ | in-flight guard در `triggerDeployment` | | Base image بدون آینه | ✅ | `build.images` در Helm values + پیش‌فرض Harbor در configuration | | zip bomb (۱۰GiB) | 🔜 | سقف آپلود موجود؛ محدودیت تعداد entry در archive پیشنهاد می‌شود | --- ## ۳. دیپلوی و پیش‌نمایش | یافته | وضعیت | یادداشت | |--------|--------|---------| | حذف preview با custom domain pending | ✅ | `hasVerifiedCustomDomain()` در k8s + deployments | | getPreviewInfo پچ NodePort | ✅ | فقط خواندن؛ ingressUrl اولویت دارد | | fallback بین‌کلاستری → ImagePullBackOff | ✅ | `CLUSTER_DEPLOY_FALLBACK_ENABLED=true` برای fallback | | NodePort host از API server | ⚠️ | `getClusterHostIp` همچنان fallback؛ ingressUrl مسیر اصلی | | suspend NodePort revoke | ✅ | `deleteTemporaryAccessServicesForApp` در suspend | --- ## ۴. دیتابیس و سرویس‌های اختیاری | یافته | وضعیت | یادداشت | |--------|--------|---------| | Redis/RabbitMQ randAlphaNum | ✅ | الگوی `lookup` در helm templates | | probe بدون auth | ✅ | redis-cli `-a` / mongo با credential | | RWO بدون Recreate | ✅ | `strategy: Recreate` | | dbPassword fallback هر deploy | ✅ | generate + persist در DB | | Mongo snapshot/restore | ✅ | | | WordPress MySQL اجباری | ✅ | | | wp-content restore از PVC | ✅ | | | PVC یتیم بعد از suspend/delete | 🔜 | نیاز به job پاک‌سازی دوره‌ای | | ایمیج DB از Docker Hub | ⚠️ | آینه در `values.yaml`؛ پیکربندی per-cluster | --- ## ۵. Migration / اسکیما | یافته | وضعیت | |--------|--------| | Job دوباره همه SQL | ✅ | | post-upgrade → pre-upgrade | ✅ | | نبود base schema | ✅ | | 015 user_id | ✅ | --- ## ۶. بیلینگ | یافته | وضعیت | |--------|--------| | wallet charge بدون درگاه | ✅ | | proration اشتباه | ✅ | | race در wallet | ✅ | pessimistic lock | | auto-renew دو بار بین replicas | ✅ | lock روی Application در transaction | | دیپلوی بدون پرداخت | ✅ | --- ## ۷. GitOps / CI-CD | یافته | وضعیت | |--------|--------| | workflow بدون تست | ✅ | | elastic password در git | ✅ | | platform Redis requirepass | ✅ | | backend RollingUpdate + limits + postgres backup | ✅ | | Swagger در production | ✅ | | RUNBOOK-DEPLOY portable | ✅ | commit `6d9cd89` | --- ## ۸. امنیت اپلیکیشن | یافته | وضعیت | یادداشت | |--------|--------|---------| | gitToken / dbPassword در API | ✅ | `@Exclude` + `hasDbPassword` / `hasGitToken` | | Elasticsearch log isolation | ✅ | namespace کامل | | OTP Math.random | ✅ | `crypto.randomInt` | | OTP consume race | ✅ | pessimistic lock در transaction | | JWT در localStorage | 🔜 | نیاز به httpOnly cookie + CSRF — اسکوپ frontend بزرگ | | refresh token rotation | 🔜 | | | secret پیش‌فرض dev | ⚠️ | `validate-production-config` در production fail می‌کند | | docker compose NODE_ENV=production | ✅ | `NODE_ENV: development` برای dev محلی | --- ## ۹. بهبود / زیرساخت | یافته | وضعیت | |--------|--------| | Backend Dockerfile helm/kubectl از اینترنت | 🔜 | mirror یا COPY از stage | | orphan PVC cleanup | 🔜 | | zip bomb hard limit | 🔜 | --- ## متغیرهای محیطی جدید (مرجع deploy) | متغیر | پیش‌فرض | توضیح | |--------|---------|-------| | `CLUSTER_DEPLOY_FALLBACK_ENABLED` | `false` | fallback بین کلاستر | | `CLUSTER_DEPLOY_FALLBACK_ATTEMPTS` | `3` | فقط وقتی fallback فعال | | `BASE_IMAGE_REGISTRY` | `registry.abrban.com/proxy-dockerhub/library` | آینه base imageهای بیلد (یا از `build` در Helm values) | | `KANIKO_IMAGE` | `registry.abrban.com/proxy-gcr/...` | Kaniko executor (یا `build.images.kaniko` در values) | | `BUILD_PVC_STORAGE_CLASS` | — | StorageClass برای PVC بیلد | | `BILLING_WALLET_HMAC_SECRET` | — | اجباری در production | | `PAYMENT_GATEWAY_*` | — | اجباری برای charge واقعی | --- ## commitهای مرتبط - `22359be` — fix(platform): apply production hardening from audit plan - `6d9cd89` — docs: add portable from-zero deploy runbook and GitOps templates - *(uncommitted)* — رفع موارد باقی‌مانده این سند (preview، OTP، zip slip، auto-renew lock، docker-compose)