Агуулгыг алгасах

Аюулгүй байдал

Экосистемийн бүх платформ нэг аюулгүй байдлын суурь дээр босдог. Энэ хуудас нь тэр суурийг тодорхойлно — шинэ платформ нэмэхдээ эдгээрийг сонголт биш, шаардлага болгон авч үзнэ.

Гүн хамгаалалт (defence in depth)

Нэг ч давхарга дангаараа хангалттай биш гэсэн зарчмаар давхарлана:

Давхарга Хамгаалалт
Edge (nginx) TLS, HSTS, rate limit, body size хязгаар
Апп (HTTP) Security header, CORS allow-list, CSRF, timeout
Апп (логик) RBAC, эрхийн шалгалт, input validation
Өгөгдлийн сан RLS, параметржүүлсэн query
Аудит Hash-chain audit log

Токен client JS-д хүрэхгүй

BFF (Backend-for-Frontend) загвар нь frontend аюулгүй байдлын үндэс.

Browser нь backend руу шууд ханддаггүй — зөвхөн ижил домэйн дээрх Next.js route-уудтай ярина, тэдгээр нь server талаас backend руу прокси хийнэ. Токен нь httpOnly cookie-д амьдарна.

Үр дүн: XSS нь токен хулгайлах вектор болохоо больдог. Халдагч JavaScript ажиллуулж чадсан ч токенд хүрэхгүй.

Дээрээс нь давхар CSRF хамгаалалт: тусгай header + origin шалгалт.

Security header

Бүх хариултад:

Header Зорилго
Content-Security-Policy XSS-ийн гүйцэтгэлийн вектор хаах
Strict-Transport-Security HTTPS-ийг албадах (HSTS)
Cross-Origin-Opener-Policy Цонх хоорондын халдлагаас тусгаарлах
Cross-Origin-Embedder-Policy Гадны нөөцийн хяналт
Cross-Origin-Resource-Policy Нөөцийг гаднаас ашиглахыг хязгаарлах

CORS нь allow-list-ээр — * хэзээ ч биш.

Postgres Row-Level Security

Байгууллага, хэрэглэгчийн өгөгдлийн тусгаарлалт нь өгөгдлийн сангийн түвшинд хэрэгжинэ, апп-ын кодын WHERE нөхцөлөөр биш.

Яагаад: апп-ын кодод нэг WHERE user_id = ? мартагдвал өгөгдөл задардаг. RLS нь тэр шалгалтыг бүх query-д, кодын алдаанаас үл хамааран хэрэгжүүлнэ.

Boot-time enforceability guard

Апп асахдаа RLS үнэхээр идэвхтэй эсэхийг шалгадаг. Хэрэв policy байхгүй, эсвэл холболтын хэрэглэгч RLS-ийг тойрч гарах эрхтэй байвал апп асахаас татгалзана.

Учир нь RLS чимээгүйхэн идэвхгүй болох нь хамгийн аюултай тохиолдол — бүх зүйл хэвийн ажиллаж байгаа мэт харагдана.

SQL

  • Параметржүүлсэн query — string concatenation байхгүй.
  • ORM байхгүй — гар бичмэл SQL, pgx дээр. Query бүр ил харагдана.

Rate limit ба timeout

Хамгаалалт Хаана
Нэвтрэлтийн rate limit (хатуу) /login, /oauth, /auth, /api/auth замууд
Апп-ын ерөнхий rate limit (зөөлөн) Бусад замууд
API rate limit /v1/* төрлийн олон нийтийн API
HTTP server timeout read · write · idle · header — бүгд тохируулагдсан
Body size хязгаар Edge дээр

Хатуу хязгаарыг зөвхөн нэвтрэлтэд

Нэвтрэлтийн хатуу rate limit-ийг бүх зам дээр тавьвал Next.js-ийн RSC prefetch-ууд хязгаар давж 503 өгдөг. Тиймээс хатуу хязгаарыг зөвхөн нэвтрэлтийн замуудад, бусдад нь зөөлөн хязгаар тавина.

Нууц мэдээллийн менежмент

  • Токен шифрлэлт — гуравдагч талын OAuth токенууд (Google Drive, Dropbox г.м.) AES-256-GCM-ээр шифрлэгдэн хадгалагдана.
  • Криптографийн түлхүүр — HSM-д; on-prem болон cloud HSM хоорондоо failover.
  • Апп-ын нууц тохиргоо — орчны хувьсагчаар, git-д хэзээ ч орохгүй.

Нууц мэдээллийг репо-д бүү хий

Server credential, API key, client secret, HSM PIN — эдгээрийн аль нь ч репо-д, скриптэд, баримтад бичигдэхгүй. Deploy скриптүүд нууц үгийг зөвхөн орчны хувьсагчаар хүлээж авна.

Нууц мэдээлэл санамсаргүй ил гарсан тохиолдолд: (1) тэр даруй ротаци хийх, (2) хандалтын логийг шалгах, (3) нууц менежментийн системд шилжүүлэх.

Production-д хаалттай endpoint

/metrics ба /swagger нь дотоод бүтэц, endpoint жагсаалтыг ил гаргадаг. Production-д bearer token-оор хаалттай.

Audit log

Hash-chain холбоост, зөвхөн-нэмэх бүртгэл. Бичлэг бүр өмнөхийнхөө hash-ийг агуулна.

Үүний утга: дундаас нэг бичлэг устгах эсвэл өөрчлөх боломжгүй — гинж тасарч, бүрэн бүтэн байдлын шалгалт унана. Зөвхөн админ уншина; бүрэн бүтэн байдлыг шалгах тусдаа үйлдэл бий.

Гарын үсэг ба non-repudiation

Хууль зүйн үр дагавартай үйлдэлд PIN2 гарын үсэг шаардана — нэвтрэлт (PIN1) хангалтгүй. Дэлгэрэнгүйг Танилт ба эрх хуудаснаас.

Гарын үсгийн хувийн түлхүүр нь 2-of-2 threshold ECDSA-аар хуваагдсан — нэг ч тал дангаараа гарын үсэг зурж чадахгүй.

Тест

  • Unit тест — бизнес логик, эрхийн шалгалт.
  • testcontainers интеграц тест — бодит PostgreSQL/Redis-тэй, RLS-ийг бодитоор шалгана.
  • Golden vector тест — крипто wire нийцтэй байдал.

Аюулгүй байдлын шалгах жагсаалт

Шинэ платформ production-д гарахаас өмнө:

  • [ ] TLS + HSTS идэвхтэй, гэрчилгээ автоматаар шинэчлэгддэг
  • [ ] Security header бүгд тохируулагдсан (CSP · HSTS · COOP · COEP · CORP)
  • [ ] CORS allow-list — * байхгүй
  • [ ] Rate limit: нэвтрэлтэд хатуу, бусдад зөөлөн
  • [ ] HTTP server timeout бүгд тохируулагдсан
  • [ ] RLS идэвхтэй + boot-time guard ажиллаж байна
  • [ ] Бүх query параметржүүлсэн
  • [ ] Токен httpOnly cookie-д, client JS-д хүрэхгүй
  • [ ] CSRF давхар хамгаалалт
  • [ ] /metrics, /swagger хаалттай
  • [ ] Audit log бичигдэж байна, бүрэн бүтэн байдал шалгагдана
  • [ ] Нууц тохиргоо орчны хувьсагчаар, репо-д байхгүй
  • [ ] Интеграц тест RLS-ийг бодитоор шалгаж байна