انتقل إلى المحتوى

Аюулгүй байдлын бодлого

Монгол  ·  English


Дэмжигдэж буй хувилбарууд

Хувилбар Аюулгүй байдлын шинэчлэлт
0.1.x Дэмжигдэнэ
< 0.1.0 Дэмжигдэхгүй

Эмзэг байдал мэдээлэх

open-gerege-nexus төслийн аюулгүй байдалд бид нухацтай ханддаг. Эмзэг байдал илрүүлсэн бол хариуцлагатайгаар мэдээлнэ үү.

Хэрхэн мэдээлэх вэ

Эмзэг байдлыг нээлттэй GitHub issue-ээр мэдээлэхгүй байхыг хүсье.

Шууд аюулгүй байдлын багт мэдэгдэнэ үү:

  • И-мэйл: security@gerege.mn
  • Хариуцагч: Gerege Systems Development Team

Мэдээлэлд оруулах зүйлс

  1. Эмзэг байдлын төрөл (SQL injection, XSS, нэвтрэлтийн алдаа, хурдны хязгаарлалт тойрох гэх мэт).
  2. Давтан гаргах бүрэн алхмууд — HTTP хүсэлтийн жишээ эсвэл кодын хэсэг.
  3. Учирч болох эрсдэл, нөлөөллийн хүрээ.
  4. Санал болгож буй засварын арга (байвал).

Хариу өгөх ба ил болгох журам

  1. Хүлээн авалт — мэдээллийг 24–48 цагийн дотор хүлээн авсныг баталгаажуулна.
  2. Шалгалт — инженерийн баг асуудлыг нягтлан баталгаажуулна.
  3. Засвар — баталгаажсан тохиолдолд засварыг хийж, тестлээд аюулгүй байдлын шинэчлэлт болгон гаргана.
  4. Ил болгох — хувилбарын тэмдэглэлтэй хамт нийтийн зөвлөмж (advisory) гаргана.

Платформд хэрэгжсэн хамгаалалтууд

Хамгаалалт Тайлбар
Тенант тусгаарлалт Бүх асуулга tenant_id-аар хязгаарлагдаж, тенант хоорондын өгөгдөл алдагдахаас сэргийлнэ
Апп хаалт Суулгаагүй эсвэл идэвхгүй модуль руу хандахад 403 Forbidden
Session токен 256 бит санамсаргүй утга; өгөгдлийн санд зөвхөн SHA-256 хэш хадгалагдана; гарахад цуцлагдана
Нууц үг bcrypt хэш
Хурдны хязгаарлалт Нэвтрэх хүсэлтэд IP-д суурилсан хязгаарлалт (golang.org/x/time/rate)
Прокси толгой X-Forwarded-For-д зөвхөн TRUST_PROXY_HEADERS=true үед итгэнэ
Аюулгүй байдлын толгойнууд X-Content-Type-Options, X-Frame-Options, Content-Security-Policy, production дээр HSTS
Замын хамгаалалт Апп slug зөвхөн a-z, 0-9, -, _ тэмдэгт зөвшөөрнө
OAuth2 client танилт Заавал шаардлагатай, тогтмол хугацааны харьцуулалт
Төрийн интеграцийн mock ENVIRONMENT=production үед автоматаар унтарна
Админ эрх Апп суулгах, идэвхжүүлэх, интеграц бүртгэх нь тенантын админ эрх шаардана
И-мэйлийн итгэмжлэл Баталгаажуулалтын захидлыг хостинг үйлчилгээ илгээх тул платформ шуудангийн нууц үг хадгалахгүй. Үйлчилгээний түлхүүр зөвхөн серверийн орчны хувьсагчид (EMAIL_VERIFY_API_KEY) байх ба хөтөч рүү, өгөгдлийн санд ч очихгүй
Нэг удаагийн буцалт Баталгаажсаны дараах буцалтыг нөхцөлт нэг UPDATE-ээр эзэмшинэ; ашигласан, хугацаа дууссан, огт байхгүй утга бүгд 410 — шуудангийн хайрцаг, хөтчийн түүхээр дамжсан утгыг дахин ашиглах боломжгүй
Буцах хаягийн хяналт Зөвхөн HTTPS (localhost-д хөгжүүлэлтэд HTTP), нэвтрэх мэдээлэлгүй — платформыг нээлттэй чиглүүлэгч болгохоос сэргийлнэ

Тогтмол шалгалтууд

CI нь push ба pull request бүр дээр дараах шалгалтыг ажиллуулна:

  • govulncheck — Go-ийн эмзэг байдлын мэдээллийн сантай тулгах.
  • gosec — эх кодын аюулгүй байдлын статик шинжилгээ.
  • golangci-lint — алдаа шалгалт, статик шинжилгээ.

Мөн долоо хоног бүрийн Даваа гарагт эмзэг байдлын шалгалт автоматаар ажиллана.

Шинэчлэлтээр засагдахгүй эмзэг байдал

Хааяа govulncheck нь засвартай хувилбар нь байхгүй эмзэг байдлыг заана. go get тусалж чадахгүй тул ажил байнга улаан болж, улмаар хэн ч уншихаа больдог — тэгээд дараагийн, нэг мөрөөр засагдах эмзэг байдал тэр улаан дотор анзаарагдалгүй өнгөрдөг. Байнгын улаан шалгалт бол шалгалт биш.

Тиймээс ийм тохиолдлыг security/accepted-vulnerabilities.json-д бичиж үлдээнэ: аль зөвлөмж, яагаад шинэчилж болохгүй, өөрсдийн кодод юу хийснээ, ба хэзээ дахин харахаа. cmd/vulngate нь CI дээр түүнийг хүчинтэй болгоно — дараах бүхэн ажлыг улаан болгоно:

  • бичигдээгүй эмзэг байдал манай кодоос хүрэхээр байх,
  • бичлэгийн review_by өдөр өнгөрөх,
  • зөвшөөрсөн эмзэг байдал засвартай болох (үл хамаарлын шалтгаан нь «шинэчлэх зүйл алга» байсан бол тэр нь худал болсон гэсэн үг),
  • мэдээлэгдэхээ больсон зүйлийн бичлэг үлдэх.

Цөмийн модульд (core/backend) үл хамаарал байхгүй: түүний эмзэг байдлыг upstream дээр нь засаад deploy/sync-core.sh-ээр авчирна.