Аюулгүй байдал¶
Экосистемийн бүх платформ нэг аюулгүй байдлын суурь дээр босдог. Энэ хуудас нь тэр суурийг тодорхойлно — шинэ платформ нэмэхдээ эдгээрийг сонголт биш, шаардлага болгон авч үзнэ.
Гүн хамгаалалт (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-ийг бодитоор шалгаж байна