# Security Policy (Suomi) 🌐 **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) · 🇫🇷 [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) · 🇦🇲 [hy](../hy/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) --- ## Haavoittuvuuksien ilmoittaminen Jos löydät OmniRoutesta tietoturvahaavoittuvuuden, ilmoita siitä vastuullisesti: 1. **ÄLÄ** avaa julkista GitHub-issue-raporttia 2. Käytä [GitHub Security Advisories](https://github.com/diegosouzapw/OmniRoute/security/advisories/new) -palvelua 3. Sisällytä: kuvaus, toistamisohjeet ja mahdolliset vaikutukset ## Vastausaikataulu | Vaihe | Tavoite | | ----------------------- | ------------------------- | | Kuittaus | 48 tuntia | | Luokittelu ja arviointi | 5 työpäivää | | Korjausjulkaisu | 14 työpäivää (kriittinen) | ## Tuetut versiot | Versio | Tuen tila | | ------- | ---------------------------------------------------- | | 3.9.x | 🗓️ Suunniteltu — LTS-haara (`stable/v3`), katso alta | | 3.8.x | ✅ Aktiivinen | | 3.7.x | ✅ Tietoturvatuki | | < 3.7.0 | ❌ Ei tuettu | ## LTS-tukijakso (v3.9.x) Version 3.8.59 jälkeen seuraava versio on **3.9.0**, joka avaa pitkäaikaisen tuen haaran `stable/v3`-branchissa (katso [`ROADMAP.md`](ROADMAP.md) → "Phase 3 — v3.9.0 LTS"). - **Mitä `stable/v3` vastaanottaa:** virheenkorjauksia, tietoturvakorjauksia ja palveluntarjoajien päivityksiä. Uudet ominaisuudet tulevat v4-kanavaan; LTS-haara asettaa vakauden etusijalle. `npm install omniroute` (`latest`-dist-tag) pysyy v3-versiossa koko v4-julkaisusyklin ajan. - **Tukijakson kesto:** ``. Tukijakson pituudesta v4.0 GA:n jälkeen (kun `latest` siirtyy v4-versioon) **ei ole vielä päätetty**; tämä osio päivitetään, kun ylläpitäjä ilmoittaa siitä. Siihen asti älä oleta päättymispäivää. - **Haavoittuvuuden ilmoittaminen LTS-haarassa:** käytä samaa kanavaa kuin muillekin versioille — yksityistä [GitHub Security Advisory](https://github.com/diegosouzapw/OmniRoute/security/advisories/new) -ilmoitusta, älä koskaan julkista issue-raporttia. Kerro, mitä versiota testasit (esimerkiksi `3.9.2`); korjaukset lisätään `stable/v3`-haaraan ja siirretään eteenpäin v4-versioon. - **Tietoturvan lähtötaso LTS-haaran luontihetkellä:** mitattu haavoittuvuusskannerin tila, reittisuojauksen ja julkisten tunnistetietojen tarkistustodisteet tallennetaan tiedostoon [`docs/security/LTS_SECURITY_BASELINE.md`](docs/security/LTS_SECURITY_BASELINE.md). --- ## Tietoturva-arkkitehtuuri OmniRoute toteuttaa monikerroksisen tietoturvamallin: ``` Pyyntö → CORS → Authz-putki (luokittele → käytännöt → toimeenpane) → Suojaukset (PII-peittäjä, kehotteen manipulointi, konenäkövälityskerros) → Nopeusrajoitin → Katkaisija → Jäähdytys → Mallin lukitus → Palveluntarjoaja ``` ### 🔐 Todennus ja valtuutus | Ominaisuus | Toteutus | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Hallintapaneelin kirjautuminen** | Salasanapohjainen todennus JWT-tunnisteilla (HttpOnly-evästeet) | | **API-avaintodennus** | HMAC-allekirjoitetut avaimet CRC-tarkistuksella | | **OAuth 2.0 + PKCE** | Palveluntarjoajakohtainen selain-/laite-OAuth käyttää PKCE:tä siellä, missä sitä tuetaan; vain tuontiin tarkoitetut Devin-tunnistetiedot käsitellään erikseen. | | **Tunnisteen päivitys** | OAuth-tunnisteiden automaattinen päivitys ennen vanhenemista | | **Suojatut evästeet** | `AUTH_COOKIE_SECURE=true` HTTPS-ympäristöissä | | **Authz-putki** | Reittien luokittelu (PUBLIC / CLIENT_API / MANAGEMENT) — katso `docs/architecture/AUTHZ_GUIDE.md` | | **Reittisuojauksen tasot** | Kolmitasoinen malli hallintareiteille (LOCAL_ONLY / ALWAYS_PROTECTED / MANAGEMENT) — katso `docs/security/ROUTE_GUARD_TIERS.md` | | **Manage-laajuuden MCP** | Etäkäyttö reitteihin `/api/mcp/*` sallitaan API-avaimilla, joilla on `manage`-laajuus; `/api/cli-tools/runtime/*` pysyy tiukasti loopback-käyttöön rajattuna. Katso ROUTE_GUARD_TIERS | | **MCP-laajuudet** | 32 hienojakoista käyttöoikeuslaajuutta (read:health, write:combos, execute:completions jne.) — katso `docs/frameworks/MCP-SERVER.md` | ### 🛡️ Levossa olevan tiedon salaus Kaikki SQLiteen tallennetut arkaluonteiset tiedot salataan käyttäen **AES-256-GCM**-salausta ja scrypt-avainjohdannaista: - API-avaimet, käyttöoikeustunnisteet, päivitystunnisteet ja ID-tunnisteet - Versioitu muoto: `enc:v1:::` - Läpivientitila (selväkielinen), kun muuttujaa `STORAGE_ENCRYPTION_KEY` ei ole asetettu ```bash # Luo salausavain: STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32) ``` ### 🛡️ Suojauskehys OmniRoute sisältää lennossa uudelleenladattavan **suojausrekisterin** (`src/lib/guardrails/`), jossa on kolme prioriteettijärjestykseen asetettua sisäänrakennettua suojausta: | Suojaus | Prioriteetti | Tarkoitus | | ------------------ | ------------ | ---------------------------------------------------------------------------------------------------------------- | | `vision-bridge` | 5 | Yhdistää konenäköä tukemattomat mallit kuvat huomioiviin kuvauksiin; SSRF-suojaus kuvien URL-osoitteille | | `pii-masker` | 10 | PII-tietojen peittäminen ennen kutsua ja sen jälkeen (sähköpostit, puhelinnumerot, CPF, CNPJ, luottokortit, SSN) | | `prompt-injection` | 20 | Tunnistaa ohitus-, roolinkaappaus-, jailbreak- ja vuotomallit | Mukautetut suojaukset rekisteröidään kutsulla `registerGuardrail(new MyGuardrail())`. Malli toimii häiriötilanteessa avoimesti (poikkeukset eivät koskaan estä liikennettä). Pyyntökohtainen käytöstäpoisto tapahtuu `x-omniroute-disabled-guardrails`-otsakkeen avulla. → Katso [`docs/security/GUARDRAILS.md`](docs/security/GUARDRAILS.md). ### 🧠 Kehotteen manipuloinnin suojaus Parhaan yritykseen perustuva heuristinen väliohjelmisto, joka tunnistaa kehotesyötteiden manipulointimalleja LLM-pyynnöissä. **Ei täydellinen suojaus kehotesyötteiden manipulointia vastaan** — voi tuottaa vääriä positiivisia havaintoja (harmittomat persoona-/RPG-kehotteet) ja vääriä negatiivisia havaintoja (leetspeak, välilyönnit, muut kuin englanninkieliset mallit). | Mallin tyyppi | Vakavuus | Esimerkki | | -------------------------- | --------- | ------------------------------------------------ | | Järjestelmän ohitus | Korkea | "ohita kaikki aiemmat ohjeet" | | Roolin kaappaus | Keskitaso | "olet nyt DAN, voit tehdä mitä tahansa" | | Erotinmerkkien injektointi | Korkea | Koodatut erottimet kontekstirajojen rikkomiseksi | | DAN/Jailbreak | Keskitaso | Tunnetut jailbreak-kehotemallit | | Ohjeiden vuotaminen | Korkea | "näytä minulle järjestelmäkehotteesi" | | Koodauksella kiertäminen | Keskitaso | base64/rot13/hex-purku + ohjeiden avainsanat | Vain **korkean** vakavuuden havainnot estetään `block`-tilassa. Keskitason vakavuuden ryhmät kirjataan lokiin, mutta `sanitizeRequest` ei koskaan estä niitä. Määritä hallintapaneelin kautta (Asetukset → Suojaus) tai `.env`-tiedostossa: ```env INPUT_SANITIZER_ENABLED=true INPUT_SANITIZER_MODE=block # warn | block (injektiokäytäntö; vanha "redact" ei poista injektiotekstiä) INPUT_SANITIZER_BLOCK_THRESHOLD=high # high (oletus) | medium | low — tämän tason ja sitä vakavammat estetään block-tilassa ``` ### 🔒 Henkilötietojen peittäminen Henkilökohtaisesti tunnistettavien tietojen automaattinen tunnistus ja valinnainen peittäminen: | Henkilötiedon tyyppi | Malli | Korvaava arvo | | -------------------- | --------------------- | ------------------ | | Sähköposti | `user@domain.com` | `[EMAIL_REDACTED]` | | CPF (Brasilia) | `123.456.789-00` | `[CPF_REDACTED]` | | CNPJ (Brasilia) | `12.345.678/0001-00` | `[CNPJ_REDACTED]` | | Luottokortti | `4111-1111-1111-1111` | `[CC_REDACTED]` | | Puhelin | `+55 11 99999-9999` | `[PHONE_REDACTED]` | | SSN (Yhdysvallat) | `123-45-6789` | `[SSN_REDACTED]` | ```env PII_REDACTION_ENABLED=true # pyynnön henkilötietojen uudelleenkirjoitus; riippumaton INPUT_SANITIZER_MODE-asetuksesta PII_RESPONSE_SANITIZATION=true # valinnainen: peitä henkilötiedot asiakkaille palautettavista palveluntarjoajien vastauksista ``` ### 🌐 Verkkoturvallisuus | Ominaisuus | Kuvaus | | ------------------------ | ------------------------------------------------------------------------------------------------------- | | **CORS** | Nimenomainen sallittujen eri alkuperien luettelo (`CORS_ALLOWED_ORIGINS`; vanha `CORS_ORIGIN`) | | **IP-suodatus** | Hallintapaneelissa määritettävät sallittujen ja estettyjen IP-alueiden luettelot | | **Nopeusrajoitus** | Palveluntarjoajakohtaiset nopeusrajoitukset automaattisella viiveen kasvatuksella | | **Kuormituspiikin esto** | Mutex + yhteyskohtainen lukitus estävät ketjuuntuvat 502-virheet | | **TLS-sormenjälki** | Selaimen kaltaisen TLS-sormenjäljen jäljittely bottitunnistuksen vähentämiseksi | | **CLI-sormenjälki** | Palveluntarjoajakohtainen otsakkeiden/rungon järjestys natiivien CLI-allekirjoitusten jäljittelemiseksi | ### 🔌 Vikasietoisuus ja saatavuus | Ominaisuus | Kuvaus | | -------------------------------------- | ---------------------------------------------------------------------------------------------- | | **Katkaisija** | 3-tilainen (Suljettu → Avoin → Puoliavoin) palveluntarjoajakohtaisesti, tallennettuna SQLiteen | | **Pyyntöjen idempotenssi** | 5 sekunnin duplikaattien poistoikkuna päällekkäisille pyynnöille | | **Eksponentiaalinen viiveen kasvatus** | Automaattinen uudelleenyritys kasvavilla viiveillä | | **Tilan hallintapaneeli** | Palveluntarjoajien tilan reaaliaikainen valvonta | ### 📋 Vaatimustenmukaisuus | Ominaisuus | Kuvaus | | --------------------------------- | ------------------------------------------------------------------------- | | **Lokien säilytys** | Automaattinen puhdistus `CALL_LOG_RETENTION_DAYS`-ajan jälkeen | | **Lokittamisesta kieltäytyminen** | API-avainkohtainen `noLog`-valitsin poistaa pyyntöjen lokituksen käytöstä | | **Tarkastusloki** | Hallinnollisia toimia seurataan `audit_log`-taulussa | | **MCP-tarkastus** | SQLite-pohjainen tarkastuslokitus kaikille MCP-työkalukutsuille | | **Zod-validointi** | Kaikki API-syötteet validoidaan Zod v4 -skeemoilla moduulia ladattaessa | --- ## Vaaditut ympäristömuuttujat Kaikki salaisuudet on asetettava ennen palvelimen käynnistämistä. Palvelin **keskeyttää käynnistyksen välittömästi**, jos niitä puuttuu tai ne ovat heikkoja. ```bash # PAKOLLINEN — palvelin ei käynnisty ilman näitä: JWT_SECRET=$(openssl rand -base64 48) # vähintään 32 merkkiä API_KEY_SECRET=$(openssl rand -hex 32) # vähintään 16 merkkiä # SUOSITELTU — mahdollistaa levossa olevien tietojen salauksen: STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32) ``` Palvelin hylkää aktiivisesti tunnetusti heikot arvot, kuten `changeme`, `secret` ja `password`. --- ## Docker-tietoturva - Käytä tuotannossa muuta kuin root-käyttäjää - Liitä salaisuudet vain luku -taltioina - Älä koskaan kopioi `.env`-tiedostoja Docker-levykuviin - Sulje arkaluonteiset tiedostot pois käyttämällä `.dockerignore`-tiedostoa - Aseta `AUTH_COOKIE_SECURE=true`, kun palvelin on HTTPS-yhteyden takana ```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 ``` --- ## Riippuvuudet - Suorita `npm audit` säännöllisesti (`npm run audit:deps` kattaa pääprojektin ja Electronin) - Pidä riippuvuudet ajan tasalla - Projekti käyttää `husky`- ja `lint-staged`-paketteja ennen commitia suoritettaviin tarkistuksiin (lint-staged + check-docs-sync + check:any-budget:t11) - CI-putki suorittaa ESLintin tietoturvasäännöt jokaisen push-toiminnon yhteydessä (`no-eval`, `no-implied-eval`, `no-new-func` = virhe) - Palveluntarjoajien vakiot validoidaan moduulia ladattaessa Zodilla (`src/shared/validation/schemas.ts`) - Käytössä ovat oletusarvoisesti turvalliset kirjastot: `dompurify` / `isomorphic-dompurify` (XSS), `jose` (JWT), `better-sqlite3` (ei SQLi-riskiä parametrisoitujen kyselyiden ansiosta), `bcryptjs` (salasanojen hajautus) ## Ehdottomat tietoturvasäännöt Työkalut ja tarkastajat valvovat näiden sääntöjen noudattamista: 1. **Älä koskaan tallenna salaisuuksia commitiin** — `.env` on ohitettu gitissä; `.env.example` on mallipohja (ei literaaleja, vain kommentteja — katso PUBLIC_CREDS.md alta) 2. **Älä koskaan käytä `eval()`- tai `new Function()`-kutsua tai epäsuoraa eval-toimintoa** — ESLint valvoo tätä 3. **Älä koskaan ohita Husky-koukkuja** (`--no-verify`, `--no-gpg-sign`) ilman operaattorin nimenomaista hyväksyntää 4. **Älä koskaan kirjoita raakaa SQL:ää reitteihin** — käytä aina `src/lib/db/`-rajapintaa (parametrisoitu) 5. **Validoi syötteet aina Zodilla** — `src/shared/validation/schemas.ts` 6. **Puhdista ylävirran otsakkeet aina** — estolista tiedostossa `src/shared/constants/upstreamHeaders.ts` 7. **Salaa tunnistetiedot levossa** — AES-256-GCM tiedoston `src/lib/db/encryption.ts` kautta 8. **Käsittele ylävirran julkiset OAuth-tunnisteet `resolvePublicCred()`-funktion kautta** — älä koskaan sisällytä lähdekoodiin `AIza…` / `GOCSPX-…` / `…apps.googleusercontent.com`-literaaleja. Katso [`docs/security/PUBLIC_CREDS.md`](docs/security/PUBLIC_CREDS.md). 9. **Muodosta virhevastaukset `buildErrorBody()`- / `sanitizeErrorMessage()`-funktioilla** — älä koskaan sisällytä käsittelemätöntä `err.stack`- / `err.message`-arvoa HTTP- / SSE- / executor- / MCP-vastausten runkoihin. Katso [`docs/security/ERROR_SANITIZATION.md`](docs/security/ERROR_SANITIZATION.md). 10. **Välitä `exec()`- / `spawn()`-kutsujen ajonaikaiset arvot `env`-valinnalla** — älä koskaan interpoloi ulkoisia polkuja tai epäluotettavia arvoja merkkijonoina komentotulkille välitettäviin komentosarjoihin. Viite: `src/mitm/cert/install.ts::updateNssDatabases`. 11. **Suosi oletusarvoisesti turvallisia kirjastoja** — katso [tldrsec/awesome-secure-defaults](https://github.com/tldrsec/awesome-secure-defaults) (Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink). Käytä niitä ennen oman toteutuksen tekemistä. ## Toimitusketjuskannerin havainnot (Socket.dev / Snyk / vastaavat) > **Laajuushuomautus:** tietovaraston juuressa oleva `socket.yml` määrittää ainoastaan Socket.dev-palvelun `projectIgnorePaths`-asetuksen julkaistun npm-artefaktin rekisteripuolen julkaisunjälkeistä tarkistusta varten — se ei ole pakotettu CI-/PR-yhdistämisen portti. Mikään `.github/workflows`-työnkulku, `package.json`-skripti tai `Makefile`-kohde ei käynnistä Socket.dev-palvelua. Julkaistu `omniroute`-npm-artefakti sisältää Next.js:n `output: "standalone"` -koontiversion, mikä tarkoittaa, että jokainen reitinkäsittelijä — mukaan lukien dokumentoidut etuoikeutetut ominaisuudet (MITM, Zed-tuonti, Cloud Sync, sulautettu palveluvalvoja) — päätyy `.next/server/*.js`-hakemiston pienennettyihin osiin. Heuristiset toimitusketjuskannerit vertaavat näitä osia usein haittaohjelmien allekirjoituksiin hahmontunnistuksen avulla. Käyttämämme skannerimääritys sijaitsee tietovaraston juuressa tiedostossa [`socket.yml`](socket.yml) (Socket.dev GitHub App -muoto v2 — katso ). Se sulkee nimenomaisesti pois toimitukseen kuulumattomat hakemistot (`tests/`, `_tasks/`, `_references/`, `_ideia/`, `_mono_repo/`, `docs/` jne.), jotta skanneri raportoi vain koodipoluista, jotka tosiasiassa päätyvät julkaistun version käyttäjille — itse tarkistuksen suorittaa Socket GitHub App lukemalla kyseisen tiedoston, ei tämän tietovaraston työnkulku. Ylläpidämme jokaiselle havaintoluokalle havaintokohtaista ylläpitäjän vahvistusta: - **[`docs/security/SOCKET_DEV_FINDINGS.md`](docs/security/SOCKET_DEV_FINDINGS.md)** — havaintokohtainen kartoitus: lähdetiedosto ↔ merkitty osa ↔ toiminta ↔ versiossa v3.8.6 toteutettu lievennys. - Lähdekoodin sisäiset `SECURITY-AUDITOR-NOTE:`-lohkot jokaisen merkityn funktion kohdalla viittaavat samaan asiakirjaan. Käyttäjät, joiden putkessa hälytystä ei voida lieventää, voivat koota version komennolla `OMNIROUTE_BUILD_PROFILE=minimal npm run build`. Tämä korvaa neljä arkaluonteista moduulia tynkämoduuleilla, jotka palauttavat suorituksen aikana HTTP 503 `feature-disabled` -vastauksen, joten etuoikeutetut koodipolut puuttuvat fyysisesti paketista. Julkaisuohje on asiakirjassa [`docs/security/SOCKET_DEV_FINDINGS.md`](docs/security/SOCKET_DEV_FINDINGS.md). ## Viitteet - [`docs/architecture/AUTHZ_GUIDE.md`](docs/architecture/AUTHZ_GUIDE.md) — valtuutusputki - [`docs/security/GUARDRAILS.md`](docs/security/GUARDRAILS.md) — suojakaiteiden kehys - [`docs/security/COMPLIANCE.md`](docs/security/COMPLIANCE.md) — tarkastusloki ja säilytys - [`docs/security/PUBLIC_CREDS.md`](docs/security/PUBLIC_CREDS.md) — **pakollinen** malli julkisille ylävirran tunnistetiedoille - [`docs/security/ERROR_SANITIZATION.md`](docs/security/ERROR_SANITIZATION.md) — **pakollinen** malli virhevastauksille - [`docs/security/SOCKET_DEV_FINDINGS.md`](docs/security/SOCKET_DEV_FINDINGS.md) — ylläpitäjän vahvistus toimitusketjuskannerin havainnoille - [`docs/architecture/RESILIENCE_GUIDE.md`](docs/architecture/RESILIENCE_GUIDE.md) — katkaisija + jäähdytysjakso + lukitus - [`docs/security/STEALTH_GUIDE.md`](docs/security/STEALTH_GUIDE.md) — TLS-sormenjälkitunnistus (oikeudellinen/eettinen huomautus) - [`CLAUDE.md`](CLAUDE.md) — ehdottomat säännöt tekoälyagenteille - [tldrsec/awesome-secure-defaults](https://github.com/tldrsec/awesome-secure-defaults) — kuratoidut oletusarvoisesti turvalliset kirjastot