UDENTIVA Ақылды стоматологиялық басқару платформасы
ҚАУІПСІЗДІК

API қауіпсіздік моделі

Қауіпсіздік бізде кейін қосылған қабат емес, сәулеттің орталығы. Деректерді оқшаулау, кимлик бөлінісі және идемпотенттік жазу кодтың ең төменгі қабатына сіңірілген — өшіруге болатын бап емес, жүйенің жұмыс тәсілі.

Жол деңгейінде оқшаулау Идемпотенттік жазу Параметрлі сұраныс Loopback оқшаулауы
Деректерді оқшаулау

Жол деңгейінде оқшаулау — fail-closed

Әрбір жалдаушыға (tenant) қатысты кестеде PostgreSQL Row-Level Security FORCE қосулы; саясат әр жолды "tenant_id = current_setting('app.current_tenant')" шартына байлайды.

Tenant context орнатылмай келген сұраныс нөл жол қайтарады — қате де емес, үнсіз бос. Бір клиниканың дерегін басқа клиниканың сессиясымен көру сәулеттік тұрғыда мүмкін емес.

Айқас-жалдаушы оқшаулау тесті үздіксіз интеграцияда (CI) міндетті жасыл; қызыл болса код біріктірілмейді.

Атомдық жазу

Transaction-local кимлик, атомдық операция

Жалдаушы сәйкестендіргіші әрбір жазу операциясында transaction ЕҢ БАСЫНДА орнатылады және тек сол transaction бойында ғана жарамды; байланыс пулына жабыспайды, басқа сұраныстарға сыртынан таралмайды.

Көп-объектілі операциялар (шот-фактура + жол + төлем + қойма шегеру) бір ғана transaction ішінде атомдық: не бәрі бірге жазылады, не ешбірі. Жартылай қалған, тұрақсыз жазба жасалмайды.

Өкілеттік

Рөл негізіндегі өкілеттік (RBAC) серверде мәжбүрленеді

Өкілеттік бақылауы API қабатында жасалады; клиентке немесе интерфейске ешқашан сенілмейді. Браузерде мәзірді жасыру тек көрінумен байланысты — нақты шешім серверде.

Өзек (Фаза 1) мутациялары админ, хатшы және дәрігер рөлдеріне қарай қорғалады. Өкілетсіз рөл ұшты шақырса да сұраныс қабылданбайды.

Қайталанудан қорғау

Идемпотенттік жазу — қосарланған операция жоқ

Әр жазу сұранысы Idempotency-Key тасымалдайды; сервер жағындағы құлып сол бір кілтпен келген екінші операцияны бөгейді.

Желі үзілгенде немесе клиент сол сұранысты қайта жібергенде де екінші төлем не шот-фактура жасалмайды. Нәтиже әрдайым біреу әрі болжамды.

Сұраныс қауіпсіздігі

SQL injection мүмкін емес — параметрлі сұраныс

Барлық дерекқор сұраныстары sqlc-мен компиляция кезінде жасалатын, толығымен параметрлі өрнектер. Код негізінде қолданушы енгізімімен қолмен string біріктіріп SQL құратын бірде-бір жол жоқ.

Бұл SQL injection шабуыл класын құрылымдық түрде жояды — «сүзу» немесе «экрандау» әрекетіне емес, сұраныстың құрылу тәсіліне негізделеді.

Желі беті

Loopback оқшаулауы — өзек сыртқа жабық

Негізгі API тек 127.0.0.1 (loopback) тыңдайды. 0.0.0.0 немесе public IP-ге қосылу әрекеті бастапқыда бас тартылады; өзек ешбір жағдайда интернетке ашылмайды.

Жалғыз public бет — жұқа қақпа (BFF): сессия, render және CSRF-тен басқа бизнес-логиканы ұстамайды. Браузер негізгі API-ді ешқашан тікелей көре де, адрестей де алмайды.

Кимлик және сессия

argon2id құпиясөз, opaque сессия кілті

Құпиясөздер сала стандарты, жадыға-қатал argon2id арқылы хэштеледі; жалаң немесе әлсіз хэш қолданылмайды.

Сессия кілттері — 32 байттық крипто-кездейсоқ opaque мәндер, Redis-те сақталады және TTL арқылы ескіреді. Браузерге тек HttpOnly + Secure + SameSite cookie ғана көрінеді; кілт JavaScript-ке мүлде ашылмайды.

Аудит

Өзгертілмейтін аудит жазбасы (append-only)

Маңызды операциялар оларды іске қосатын мутациямен СОЛ БІР transaction ішінде append-only аудит жазбасына жазылады. Операция кері қайтарылса аудит жазбасы да жазылмайды — екеуі ажырамайды.

Аудит кестесінен UPDATE/DELETE рұқсаты алынған; жазбалар кейін өңделмейді немесе жойылмайды. Өткен өз күйінде қалады.

Құпиялылық

Құпия деректі маскалау

TCKN, құпиясөз, сессия кілті және денсаулық дерегі журналдарға ешбір түрде түспейді. Жөндеу шығысында да бұл өрістер маскаланады.

Қажет болғанда құпия өрістер бағана деңгейінде шифрланады. Айрықша сипаттағы денсаулық дерегі дизайнға бастан енгізілген ережелермен қорғалады.

Ақша тұтастығы

Ақша қауіпсіздігі — numeric, кері жазба

Ақша барлық жерде numeric(14,2)-мен сақталады; float-пен ақша есебі жасалмайды. Дөңгелектеу бір ғана нүктеде, серверде орындалады — тиын жылжуы немесе дөңгелектеу айырмасы болмайды.

Бас тарту мен қайтарым жазбаны жоюдың орнына кері жазба ретінде өңделеді. Ағымдағы шот қалдығы қолмен жазылмайды; әрдайым шот-фактура мен төлем қосындысынан туындайды. Өткен бұзылмайды.

Тасымалдау

Тасымалдау және браузер қауіпсіздігі

Барлық трафик HTTPS/TLS арқылы тасымалданады және HSTS қосулы; браузер байланысты тек шифрланған түрде орнатады.

Қатаң мазмұн қауіпсіздігі саясаты (CSP) inline script-ті бөгейді; X-Frame-Options DENY clickjacking-ті, X-Content-Type-Options nosniff тип-шатастыруды болдырмайды. Referrer-Policy мен Permissions-Policy да қолданылады.

Маңызды

Кимлик tier бөлінісі + бөлек басқару жазықтығы

Клиника пайдаланушысы, науқас порталы және платформа-операторы БӨЛЕК сәйкестендіру tier-лері: бөлек тақырып, бөлек сессия аймағы. Бір tier-дің кілті екіншісінде жұмыс істемейді — өкілеттік шекаралары нақты бөлінген.

Платформа мен басқару ұштары (жалдаушыны қамтамасыз ету, шот-фактура жасау, автоматтандыру/қосымша басқару, API кілтін генерациялау) public API-де ОРНАЛАСПАЙДЫ.

Бұл функциялар бөлек, ішкі, өзгеше кимлик өрнегіне (арнайы басқару кілті) ие басқару жазықтығында жұмыс істейді; сырттан қатынауға болмайды әрі анықтауға келмейді. Осылайша шабуыл беті айтарлықтай кішірейеді.

ҚАЛАЙ ЖҰМЫС ІСТЕЙДІ

Бір transaction, fail-closed оқшаулау

Төмендегі тұжырымдық ағын әр жазудың жалдаушыға қалай құлыпталатынын және идемпотенттік болып қалатынын көрсетеді. Тек түсіндіру мақсатында.

# 1) Tenant контексті transaction-ның ЕҢ БАСЫНДА орнатылады (тек осы tx-ке ғана тән)
BEGIN;
  SELECT set_config('app.current_tenant', :session_tenant_id, true);

  # 2) Idempotency-Key құлпы — бір кілтпен екінші операция жасалмайды
  SELECT lock_idempotency(:idempotency_key);

  # 3) Көп-нысанды жазу — барлығы бір tx-те атомарлы
  INSERT INTO invoices  ...;   # RLS: tenant_id автоматты қамтылады
  INSERT INTO payments  ...;
  INSERT INTO audit_log ...;   # append-only, сол бір tx
COMMIT;

# Context орнатылмаса, RLS саясаты бірде-бір жол қайтармайды:
SELECT * FROM patients;  --> 0 жол (қате емес, үнсіз бос)
Тәуелсіз тексерілетін

Тасымалдау қауіпсіздігінің бір бөлігін сырттан байқауға болады: байланысыңыздағы HTTPS/TLS сертификатын, HSTS және контент қауіпсіздік саясаты сияқты жауап қауіпсіздік тақырыпшаларын браузеріңіздің әзірлеуші құралдарынан өзіңіз тексере аласыз. Тұжырымдарымыз сәулеттік бақылауларға негізделеді, маркетинг сөйлемдеріне емес.

Қауіпсіздік сәулеті туралы сұрақ бар ма?
Командамыз техникалық мәліметтер мен сәйкестік талаптарыңызды сізбен талқылауға қуанышты.
Байланысу