# Security Policy (Հայերեն) 🌐 **Languages:** 🇺🇸 [English](../../../SECURITY.md) · 🇪🇹 [am](../am/SECURITY.md) · 🇸🇦 [ar](../ar/SECURITY.md) · 🇦🇿 [az](../az/SECURITY.md) · 🇧🇬 [bg](../bg/SECURITY.md) · 🇧🇩 [bn](../bn/SECURITY.md) · 🇧🇦 [bs](../bs/SECURITY.md) · 🇨🇿 [cs](../cs/SECURITY.md) · 🇩🇰 [da](../da/SECURITY.md) · 🇩🇪 [de](../de/SECURITY.md) · 🇬🇷 [el](../el/SECURITY.md) · 🇪🇸 [es](../es/SECURITY.md) · 🇪🇪 [et](../et/SECURITY.md) · 🇮🇷 [fa](../fa/SECURITY.md) · 🇫🇮 [fi](../fi/SECURITY.md) · 🇫🇷 [fr](../fr/SECURITY.md) · 🇮🇪 [ga](../ga/SECURITY.md) · 🇮🇳 [gu](../gu/SECURITY.md) · 🇳🇬 [ha](../ha/SECURITY.md) · 🇮🇱 [he](../he/SECURITY.md) · 🇮🇳 [hi](../hi/SECURITY.md) · 🇭🇷 [hr](../hr/SECURITY.md) · 🇭🇺 [hu](../hu/SECURITY.md) · 🇮🇩 [id](../id/SECURITY.md) · 🇳🇬 [ig](../ig/SECURITY.md) · 🇮🇹 [it](../it/SECURITY.md) · 🇯🇵 [ja](../ja/SECURITY.md) · 🇬🇪 [ka](../ka/SECURITY.md) · 🇰🇭 [km](../km/SECURITY.md) · 🇮🇳 [kn](../kn/SECURITY.md) · 🇰🇷 [ko](../ko/SECURITY.md) · 🇱🇹 [lt](../lt/SECURITY.md) · 🇱🇻 [lv](../lv/SECURITY.md) · 🇮🇳 [ml](../ml/SECURITY.md) · 🇮🇳 [mr](../mr/SECURITY.md) · 🇲🇾 [ms](../ms/SECURITY.md) · 🇲🇹 [mt](../mt/SECURITY.md) · 🇲🇲 [my](../my/SECURITY.md) · 🇳🇵 [ne](../ne/SECURITY.md) · 🇳🇱 [nl](../nl/SECURITY.md) · 🇳🇴 [no](../no/SECURITY.md) · 🇮🇳 [or](../or/SECURITY.md) · 🇮🇳 [pa](../pa/SECURITY.md) · 🇵🇭 [phi](../phi/SECURITY.md) · 🇵🇱 [pl](../pl/SECURITY.md) · 🇵🇹 [pt](../pt/SECURITY.md) · 🇧🇷 [pt-BR](../pt-BR/SECURITY.md) · 🇷🇴 [ro](../ro/SECURITY.md) · 🇷🇺 [ru](../ru/SECURITY.md) · 🇱🇰 [si](../si/SECURITY.md) · 🇸🇰 [sk](../sk/SECURITY.md) · 🇸🇮 [sl](../sl/SECURITY.md) · 🇷🇸 [sr](../sr/SECURITY.md) · 🇸🇪 [sv](../sv/SECURITY.md) · 🇰🇪 [sw](../sw/SECURITY.md) · 🇮🇳 [ta](../ta/SECURITY.md) · 🇮🇳 [te](../te/SECURITY.md) · 🇹🇭 [th](../th/SECURITY.md) · 🇹🇷 [tr](../tr/SECURITY.md) · 🇺🇦 [uk-UA](../uk-UA/SECURITY.md) · 🇵🇰 [ur](../ur/SECURITY.md) · 🇺🇿 [uz](../uz/SECURITY.md) · 🇻🇳 [vi](../vi/SECURITY.md) · 🇳🇬 [yo](../yo/SECURITY.md) · 🇨🇳 [zh-CN](../zh-CN/SECURITY.md) · 🇹🇼 [zh-TW](../zh-TW/SECURITY.md) --- ## Խոցելիությունների մասին հաղորդում Եթե OmniRoute-ում հայտնաբերեք անվտանգության խոցելիություն, խնդրում ենք դրա մասին պատասխանատու կերպով հաղորդել՝ 1. **ՄԻ՛** բացեք հանրային GitHub issue 2. Օգտագործեք [GitHub Security Advisories](https://github.com/diegosouzapw/OmniRoute/security/advisories/new) 3. Ներառեք՝ նկարագրությունը, վերարտադրման քայլերը և հնարավոր ազդեցությունը ## Արձագանքման ժամանակացույց | Փուլ | Թիրախային ժամկետ | | ----------------- | ------------------------------- | | Ստացման հաստատում | 48 ժամ | | Տրիաժ և գնահատում | 5 աշխատանքային օր | | Շտկման թողարկում | 14 աշխատանքային օր (կրիտիկական) | ## Աջակցվող տարբերակներ | Տարբերակ | Աջակցության կարգավիճակ | | -------- | ---------------------------------------------------- | | 3.9.x | 🗓️ Պլանավորված — LTS ճյուղ (`stable/v3`), տե՛ս ստորև | | 3.8.x | ✅ Ակտիվ | | 3.7.x | ✅ Անվտանգության աջակցություն | | < 3.7.0 | ❌ Չի աջակցվում | ## LTS աջակցության ժամանակահատված (v3.9.x) 3.8.59-ից հետո հաջորդ տարբերակը **3.9.0**-ն է, որը բացում է երկարաժամկետ աջակցության ճյուղը `stable/v3` ճյուղում (տե՛ս [`ROADMAP.md`](ROADMAP.md) → «Փուլ 3 — v3.9.0 LTS»)։ - **Ինչ է ստանում `stable/v3`-ը՝** սխալների շտկումներ, անվտանգության պատչեր և մատակարարների թարմացումներ։ Նոր հնարավորությունները փոխանցվում են v4 ալիքին, իսկ LTS ճյուղն առաջնահերթություն է տալիս կայունությանը։ `npm install omniroute` (`latest` dist-tag-ը) ամբողջ v4 ցիկլի ընթացքում մնում է v3-ում։ - **Ժամանակահատվածի տևողությունը՝** ``։ v4.0 GA-ից հետո (երբ `latest`-ն անցնի v4-ի) ժամանակահատվածի տևողությունը **դեռ որոշված չէ**․ այս բաժինը կթարմացվի, երբ սպասարկողը հայտարարի այն։ Մինչ այդ ավարտի ամսաթիվ մի՛ ենթադրեք։ - **LTS ճյուղում խոցելիության մասին հաղորդում՝** նույն ալիքով, ինչ ցանկացած այլ տարբերակի դեպքում՝ մասնավոր [GitHub Security Advisory](https://github.com/diegosouzapw/OmniRoute/security/advisories/new), և երբեք՝ հանրային issue։ Նշեք, թե որ տարբերակն եք փորձարկել (օրինակ՝ `3.9.2`)․ շտկումները ներառվում են `stable/v3`-ում և տեղափոխվում առաջ՝ դեպի v4։ - **Անվտանգության ելակետային վիճակը LTS-ի առանձնացման պահին՝** սկանավորիչով չափված վիճակը, երթուղիների պաշտպանության և հանրային հավատարմագրերի ապացույցները գրանցված են [`docs/security/LTS_SECURITY_BASELINE.md`](docs/security/LTS_SECURITY_BASELINE.md)-ում։ --- ## Անվտանգության ճարտարապետություն OmniRoute-ն իրականացնում է բազմաշերտ անվտանգության մոդել՝ ``` Հարցում → CORS → Authz կոնվեյեր (դասակարգում → քաղաքականություններ → կիրառում) → Պաշտպանիչ սահմանափակումներ (PII քողարկիչ, հուշման ներարկում, տեսողական կամուրջ) → Արագության սահմանափակիչ → Շղթայի անջատիչ → Սպասման շրջան → Մոդելի արգելափակում → Մատակարար ``` ### 🔐 Նույնականացում և լիազորում | Հնարավորություն | Իրականացում | | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Կառավարման վահանակի մուտք** | Գաղտնաբառի վրա հիմնված նույնականացում՝ JWT տոկեններով (HttpOnly cookie-ներ) | | **API բանալիով նույնականացում** | HMAC-ով ստորագրված բանալիներ՝ CRC վավերացմամբ | | **OAuth 2.0 + PKCE** | Մատակարարին հատուկ բրաուզերային/սարքային OAuth-ը հնարավորության դեպքում օգտագործում է PKCE, իսկ միայն ներմուծման համար նախատեսված Devin հավատարմագրերը մշակվում են առանձին։ | | **Տոկենի թարմացում** | OAuth տոկենի ավտոմատ թարմացում՝ մինչև վավերականության ժամկետի ավարտը | | **Անվտանգ cookie-ներ** | `AUTH_COOKIE_SECURE=true`՝ HTTPS միջավայրերի համար | | **Authz կոնվեյեր** | Երթուղիների դասակարգում (PUBLIC / CLIENT_API / MANAGEMENT) — տե՛ս `docs/architecture/AUTHZ_GUIDE.md` | | **Երթուղիների պաշտպանության մակարդակներ** | 3-մակարդակ մոդել կառավարման երթուղիների համար (LOCAL_ONLY / ALWAYS_PROTECTED / MANAGEMENT) — տե՛ս `docs/security/ROUTE_GUARD_TIERS.md` | | **Կառավարման շրջանակով MCP** | Հեռավար `/api/mcp/*` հասանելիությունը սահմանափակված է `manage` շրջանակով API բանալիներով, իսկ `/api/cli-tools/runtime/*`-ը մնում է խիստ loopback։ Տե՛ս ROUTE_GUARD_TIERS | | **MCP շրջանակներ** | 32 մանրահատիկ շրջանակ (read:health, write:combos, execute:completions և այլն) — տե՛ս `docs/frameworks/MCP-SERVER.md` | ### 🛡️ Պահպանված տվյալների կոդավորում SQLite-ում պահվող բոլոր զգայուն տվյալները կոդավորվում են **AES-256-GCM**-ով՝ scrypt բանալու ածանցմամբ՝ - API բանալիներ, հասանելիության տոկեններ, թարմացման տոկեններ և ID տոկեններ - Տարբերակավորված ձևաչափ՝ `enc:v1:::` - Ուղղակի փոխանցման ռեժիմ (բաց տեքստ), երբ `STORAGE_ENCRYPTION_KEY`-ը սահմանված չէ ```bash # Ստեղծել կոդավորման բանալի՝ STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32) ``` ### 🛡️ Պաշտպանիչ սահմանափակումների հենք OmniRoute-ը տրամադրվում է թեժ վերաբերեռնվող **պաշտպանիչ սահմանափակումների ռեեստրով** (`src/lib/guardrails/`), որն ունի ըստ առաջնահերթության դասավորված 3 ներկառուցված պաշտպանիչ սահմանափակում՝ | Պաշտպանիչ սահմանափակում | Առաջնահերթություն | Նպատակ | | ----------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `vision-bridge` | 5 | Ոչ տեսողական մոդելները կապում է պատկերները հաշվի առնող նկարագրությունների հետ․ SSRF պաշտպանություն պատկերների URL-ների համար | | `pii-masker` | 10 | PII-ի քողարկում կանչից առաջ և հետո (էլ․ փոստ, հեռախոս, CPF, CNPJ, վարկային քարտեր, SSN) | | `prompt-injection` | 20 | Հայտնաբերում է վերասահմանման/դերի զավթման/jailbreak/արտահոսքի ձևանմուշները | Հատուկ պաշտպանիչ սահմանափակումները գրանցվում են `registerGuardrail(new MyGuardrail())`-ի միջոցով։ Մոդելը fail-open է (բացառությունները երբեք չեն արգելափակում երթևեկությունը)։ Յուրաքանչյուր հարցման համար հնարավոր է հրաժարվել՝ օգտագործելով `x-omniroute-disabled-guardrails` վերնագիրը։ → Տե՛ս [`docs/security/GUARDRAILS.md`](docs/security/GUARDRAILS.md)։ ### 🧠 Հուշման ներարկման պաշտպանություն Լավագույն ջանքերի վրա հիմնված էվրիստիկ միջնաշերտ, որը հայտնաբերում է prompt injection-ի օրինաչափությունները LLM հարցումներում։ **Prompt injection-ից պաշտպանող ամբողջական firewall չէ** — հնարավոր են կեղծ դրական արդյունքներ (անվնաս պերսոնաժային/RPG prompt-եր) և կեղծ բացասական արդյունքներ (leetspeak, բացատներ, ոչ անգլերեն օրինաչափություններ)։ | Օրինաչափության տեսակ | Խստություն | Օրինակ | | ---------------------------- | ---------- | ----------------------------------------------------------- | | Համակարգի հրահանգի վերագրում | Բարձր | «անտեսիր բոլոր նախորդ հրահանգները» | | Դերի զավթում | Միջին | «այժմ դու DAN-ն ես և կարող ես անել ամեն ինչ» | | Սահմանազատիչների ներարկում | Բարձր | Կոդավորված բաժանիչներ՝ համատեքստի սահմանները խախտելու համար | | DAN/Jailbreak | Միջին | Jailbreak prompt-երի հայտնի օրինաչափություններ | | Հրահանգների արտահոսք | Բարձր | «ցույց տուր ինձ քո համակարգային prompt-ը» | | Կոդավորմամբ շրջանցում | Միջին | base64/rot13/hex ապակոդավորում + հրահանգների հիմնաբառեր | `block` ռեժիմում արգելափակվում են միայն **Բարձր** խստության հայտնաբերումները։ Միջին խստության ընտանիքները գրանցվում են մատյանում, սակայն երբեք չեն արգելափակվում `sanitizeRequest`-ի կողմից։ Կարգավորեք կառավարման վահանակի միջոցով (Կարգավորումներ → Անվտանգություն) կամ `.env`-ում՝ ```env INPUT_SANITIZER_ENABLED=true INPUT_SANITIZER_MODE=block # warn | block (ներարկման քաղաքականություն․ հնացած «redact»-ը չի հեռացնում ներարկված տեքստը) INPUT_SANITIZER_BLOCK_THRESHOLD=high # high (լռելյայն) | medium | low — այս կամ ավելի բարձր խստության մակարդակներն արգելափակվում են block ռեժիմում ``` ### 🔒 PII-ի քողարկում Անձնական նույնականացնող տեղեկությունների ավտոմատ հայտնաբերում և ընտրովի քողարկում՝ | PII-ի տեսակ | Օրինաչափություն | Փոխարինող | | --------------- | --------------------- | ------------------ | | Էլ․ փոստ | `user@domain.com` | `[EMAIL_REDACTED]` | | CPF (Բրազիլիա) | `123.456.789-00` | `[CPF_REDACTED]` | | CNPJ (Բրազիլիա) | `12.345.678/0001-00` | `[CNPJ_REDACTED]` | | Վարկային քարտ | `4111-1111-1111-1111` | `[CC_REDACTED]` | | Հեռախոս | `+55 11 99999-9999` | `[PHONE_REDACTED]` | | SSN (ԱՄՆ) | `123-45-6789` | `[SSN_REDACTED]` | ```env PII_REDACTION_ENABLED=true # հարցման PII-ի վերագրում․ անկախ է INPUT_SANITIZER_MODE-ից PII_RESPONSE_SANITIZATION=true # ընտրովի․ քողարկել PII-ը հաճախորդներին վերադարձվող մատակարարի պատասխաններում ``` ### 🌐 Ցանցային անվտանգություն | Գործառույթ | Նկարագրություն | | --------------------------------- | -------------------------------------------------------------------------------------------------------------------- | | **CORS** | Թույլատրված միջծագումային աղբյուրների բացահայտ ցանկ (`CORS_ALLOWED_ORIGINS`; հնացած՝ `CORS_ORIGIN`) | | **IP-ի զտում** | Թույլատրված/արգելափակված IP միջակայքեր կառավարման վահանակում | | **Հաճախականության սահմանափակում** | Յուրաքանչյուր մատակարարի համար հաճախականության սահմանաչափեր՝ ավտոմատ հետաձգմամբ | | **Կուտակված հարցումների կանխում** | Mutex-ը + յուրաքանչյուր կապի առանձին կողպումը կանխում են շղթայական 502 սխալները | | **TLS մատնահետք** | Բրաուզերին նման TLS մատնահետքի կեղծում՝ բոտերի հայտնաբերումը նվազեցնելու համար | | **CLI մատնահետք** | Յուրաքանչյուր մատակարարի համար վերնագրերի/մարմնի դասավորություն՝ բնիկ CLI ստորագրություններին համապատասխանելու համար | ### 🔌 Կայունություն և հասանելիություն | Գործառույթ | Նկարագրություն | | --------------------------------------- | ---------------------------------------------------------------------------------------- | | **Շղթայի անջատիչ** | 3 վիճակով (Փակ → Բաց → Կիսաբաց)՝ յուրաքանչյուր մատակարարի համար, պահպանվում է SQLite-ում | | **Հարցումների իդեմպոտենտություն** | 5 վայրկյանանոց ապակրկնօրինակման պատուհան կրկնվող հարցումների համար | | **Էքսպոնենցիալ հետաձգում** | Ավտոմատ կրկնափորձ՝ աճող ուշացումներով | | **Առողջական վիճակի կառավարման վահանակ** | Մատակարարների առողջական վիճակի իրական ժամանակի մշտադիտարկում | ### 📋 Համապատասխանություն | Գործառույթ | Նկարագրություն | | ----------------------------- | ------------------------------------------------------------------------------------- | | **Մատյանների պահպանում** | Ավտոմատ մաքրում `CALL_LOG_RETENTION_DAYS`-ից հետո | | **Մատյանավորումից հրաժարում** | Յուրաքանչյուր API բանալու `noLog` դրոշակն անջատում է հարցումների մատյանավորումը | | **Աուդիտի մատյան** | Վարչական գործողությունները հետագծվում են `audit_log` աղյուսակում | | **MCP աուդիտ** | SQLite-ի վրա հիմնված աուդիտի մատյանավորում բոլոր MCP գործիքների կանչերի համար | | **Zod վավերացում** | Բոլոր API մուտքային տվյալները վավերացվում են Zod v4 սխեմաներով՝ մոդուլի բեռնման պահին | --- ## Պահանջվող միջավայրի փոփոխականներ Բոլոր գաղտնիքները պետք է սահմանված լինեն սերվերը գործարկելուց առաջ։ Եթե դրանք բացակայում են կամ թույլ են, սերվերը **անմիջապես կդադարեցնի աշխատանքը**։ ```bash # ՊԱՐՏԱԴԻՐ — առանց սրանց սերվերը չի գործարկվի. JWT_SECRET=$(openssl rand -base64 48) # նվազագույնը՝ 32 նիշ API_KEY_SECRET=$(openssl rand -hex 32) # նվազագույնը՝ 16 նիշ # ԽՈՐՀՈՒՐԴ Է ՏՐՎՈՒՄ — միացնում է պահման վիճակում գաղտնագրումը. STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32) ``` Սերվերն ակտիվորեն մերժում է հայտնի թույլ արժեքները, ինչպիսիք են `changeme`, `secret` կամ `password`։ --- ## Docker-ի անվտանգություն - Արտադրական միջավայրում օգտագործեք ոչ արտոնյալ օգտատեր - Գաղտնիքները միացրեք որպես միայն կարդալու հատորներ - Երբեք մի պատճենեք `.env` ֆայլերը Docker պատկերների մեջ - Օգտագործեք `.dockerignore`՝ զգայուն ֆայլերը բացառելու համար - HTTPS-ի հետևում աշխատելիս սահմանեք `AUTH_COOKIE_SECURE=true` ```bash docker run -d \ --name omniroute \ --restart unless-stopped \ --read-only \ -p 20128:20128 \ -v omniroute-data:/app/data \ -e JWT_SECRET="$(openssl rand -base64 48)" \ -e API_KEY_SECRET="$(openssl rand -hex 32)" \ -e STORAGE_ENCRYPTION_KEY="$(openssl rand -hex 32)" \ diegosouzapw/omniroute:latest ``` --- ## Կախվածություններ - Պարբերաբար գործարկեք `npm audit` (`npm run audit:deps`-ը ներառում է հիմնական մասը + electron-ը) - Կախվածությունները պահեք արդիական - Նախագիծն օգտագործում է `husky` + `lint-staged`՝ commit-ից առաջ ստուգումների համար (lint-staged + check-docs-sync + check:any-budget:t11) - CI հոսքաշարն ամեն push-ի ժամանակ գործարկում է ESLint-ի անվտանգության կանոնները (`no-eval`, `no-implied-eval`, `no-new-func` = սխալ) - Մատակարարների հաստատունները մոդուլի բեռնման ժամանակ վավերացվում են Zod-ի միջոցով (`src/shared/validation/schemas.ts`) - Օգտագործվում են լռելյայն անվտանգ գրադարաններ՝ `dompurify` / `isomorphic-dompurify` (XSS), `jose` (JWT), `better-sqlite3` (պարամետրացված հարցումների շնորհիվ SQLi-ի վտանգ չկա), `bcryptjs` (գաղտնաբառերի հեշավորում) ## Անվտանգության խիստ կանոններ Այս կանոնների պահպանումն ապահովվում է գործիքների և ստուգողների կողմից. 1. **Երբեք commit մի արեք գաղտնիքներ** — `.env`-ն անտեսվում է git-ի կողմից, իսկ `.env.example`-ը ձևանմուշն է (առանց բառացի արժեքների, միայն մեկնաբանություններ՝ տե՛ս ստորև նշված PUBLIC_CREDS.md-ը) 2. **Երբեք մի օգտագործեք `eval()`, `new Function()` կամ անուղղակի eval** — ESLint-ն ապահովում է այս կանոնի պահպանումը 3. **Երբեք մի շրջանցեք Husky-ի hook-երը** (`--no-verify`, `--no-gpg-sign`) առանց օպերատորի հստակ հաստատման 4. **Երբեք մի գրեք անմշակ SQL route-երում** — միշտ օգտագործեք `src/lib/db/`-ը (պարամետրացված) 5. **Միշտ վավերացրեք մուտքային տվյալները Zod-ով** — `src/shared/validation/schemas.ts` 6. **Միշտ մաքրեք վերին հոսքի վերնագրերը** — արգելացանկը գտնվում է `src/shared/constants/upstreamHeaders.ts`-ում 7. **Գաղտնագրեք նույնականացման տվյալները պահման վիճակում** — AES-256-GCM՝ `src/lib/db/encryption.ts`-ի միջոցով 8. **Վերին հոսքի հանրային OAuth նույնացուցիչներն օգտագործեք `resolvePublicCred()`-ի միջոցով** — երբեք սկզբնաղբյուրում մի ներառեք `AIza…` / `GOCSPX-…` / `…apps.googleusercontent.com` բառացի արժեքներ։ Տե՛ս [`docs/security/PUBLIC_CREDS.md`](docs/security/PUBLIC_CREDS.md)։ 9. **Սխալի պատասխանները ձևավորեք `buildErrorBody()` / `sanitizeErrorMessage()`-ի միջոցով** — երբեք անմշակ `err.stack` / `err.message` մի ներառեք HTTP / SSE / executor / MCP պատասխանների մարմիններում։ Տե՛ս [`docs/security/ERROR_SANITIZATION.md`](docs/security/ERROR_SANITIZATION.md)։ 10. **`exec()` / `spawn()`-ի գործարկման ժամանակի արժեքները փոխանցեք `env` ընտրանքի միջոցով** — երբեք արտաքին ուղիները կամ անվստահելի արժեքները տողային ինտերպոլացիայով մի ներառեք shell-ին փոխանցվող սկրիպտներում։ Հղում՝ `src/mitm/cert/install.ts::updateNssDatabases`։ 11. **Նախապատվությունը տվեք լռելյայն անվտանգ գրադարաններին** — տե՛ս [tldrsec/awesome-secure-defaults](https://github.com/tldrsec/awesome-secure-defaults) (Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink)։ Նախ օգտագործեք դրանք՝ սեփական լուծումը ստեղծելու փոխարեն։ ## Մատակարարման շղթայի սկաների հայտնաբերումներ (Socket.dev / Snyk / նմանատիպ գործիքներ) > **Շրջանակի նշում․** պահոցի արմատում գտնվող `socket.yml`-ը միայն սահմանում է `projectIgnorePaths`-ը՝ հրապարակված npm արտեֆակտի Socket.dev-ի ռեեստրի կողմում կատարվող հետհրապարակման սկանավորման համար․ այն պարտադրված CI/PR միավորման արգելափակիչ չէ։ `.github/workflows`-ում ոչ մի աշխատանքային հոսք, `package.json`-ում ոչ մի սկրիպտ և `Makefile`-ում ոչ մի թիրախ չի կանչում Socket.dev-ը։ Հրապարակված `omniroute` npm արտեֆակտը ներառում է Next.js-ի `output: "standalone"` կառուցումը, ինչը նշանակում է, որ յուրաքանչյուր երթուղու մշակիչ, ներառյալ փաստաթղթավորված արտոնյալ գործառույթները (MITM, Zed ներմուծում, Cloud Sync, ներդրված ծառայությունների վերահսկիչ), հայտնվում է `.next/server/*.js` փոքրացված հատվածներում։ Մատակարարման շղթայի էվրիստիկ սկաներները հաճախ այդ հատվածները համադրում են վնասաբեր ծրագրերի ստորագրությունների հետ։ Մեր օգտագործած սկաների կազմաձևը գտնվում է պահոցի արմատում՝ [`socket.yml`](socket.yml) ֆայլում (Socket.dev GitHub App ձևաչափ v2 — տե՛ս )։ Այն բացահայտորեն բացառում է չառաքվող գրացուցակները (`tests/`, `_tasks/`, `_references/`, `_ideia/`, `_mono_repo/`, `docs/` և այլն), որպեսզի սկաները զեկուցի միայն այն կոդային ուղիների մասին, որոնք իրականում հասնում են հրապարակված տարբերակի օգտատերերին․ սկանավորումն ինքնին կատարվում է Socket GitHub App-ի կողմից՝ այդ ֆայլը կարդալու միջոցով, այլ ոչ թե այս պահոցի որևէ աշխատանքային հոսքի միջոցով։ Հայտնաբերումների յուրաքանչյուր կատեգորիայի համար մենք պահպանում ենք սպասարկողի հավաստում՝ ըստ առանձին հայտնաբերման․ - **[`docs/security/SOCKET_DEV_FINDINGS.md`](docs/security/SOCKET_DEV_FINDINGS.md)** — քարտեզ ըստ առանձին հայտնաբերման՝ սկզբնաղբյուր ֆայլ ↔ դրոշակավորված հատված ↔ վարքագիծ ↔ v3.8.6-ում կիրառված մեղմացում։ - Սկզբնաղբյուր կոդում յուրաքանչյուր դրոշակավորված ֆունկցիայի մոտ գտնվող `SECURITY-AUDITOR-NOTE:` բլոկները հղում են կատարում նույն փաստաթղթին։ Այն օգտատերերի համար, որոնց մշակման շղթան չի կարող մեղմացնել ահազանգը՝ կառուցեք `OMNIROUTE_BUILD_PROFILE=minimal npm run build` հրամանով։ Սա չորս զգայուն մոդուլները փոխարինում է դատարկ իրականացումներով, որոնք կատարման պահին վերադարձնում են HTTP 503 `feature-disabled`, ուստի արտոնյալ կոդային ուղիները ֆիզիկապես բացակայում են փաթեթից։ Հրապարակման հրահանգների համար տե՛ս [`docs/security/SOCKET_DEV_FINDINGS.md`](docs/security/SOCKET_DEV_FINDINGS.md)։ ## Հղումներ - [`docs/architecture/AUTHZ_GUIDE.md`](docs/architecture/AUTHZ_GUIDE.md) — թույլտվությունների ստուգման մշակման շղթա - [`docs/security/GUARDRAILS.md`](docs/security/GUARDRAILS.md) — պաշտպանիչ սահմանափակումների համակարգ - [`docs/security/COMPLIANCE.md`](docs/security/COMPLIANCE.md) — աուդիտի մատյան և պահպանում - [`docs/security/PUBLIC_CREDS.md`](docs/security/PUBLIC_CREDS.md) — հանրային վերին մակարդակի հավատարմագրերի **պարտադիր** ձևանմուշ - [`docs/security/ERROR_SANITIZATION.md`](docs/security/ERROR_SANITIZATION.md) — սխալների պատասխանների **պարտադիր** ձևանմուշ - [`docs/security/SOCKET_DEV_FINDINGS.md`](docs/security/SOCKET_DEV_FINDINGS.md) — մատակարարման շղթայի սկաների հայտնաբերումների վերաբերյալ սպասարկողի հավաստում - [`docs/architecture/RESILIENCE_GUIDE.md`](docs/architecture/RESILIENCE_GUIDE.md) — շղթայի անջատիչ + հովացման շրջան + արգելափակում - [`docs/security/STEALTH_GUIDE.md`](docs/security/STEALTH_GUIDE.md) — TLS մատնահետքերի նույնականացում (իրավական/էթիկական ծանուցում) - [`CLAUDE.md`](CLAUDE.md) — խիստ կանոններ AI գործակալների համար - [tldrsec/awesome-secure-defaults](https://github.com/tldrsec/awesome-secure-defaults) — լռելյայն անվտանգ գրադարանների ընտրված հավաքածու