🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
જો તમને OmniRouteમાં કોઈ સુરક્ષા નબળાઈ મળે, તો કૃપા કરીને જવાબદારીપૂર્વક તેની જાણ કરો:
- સાર્વજનિક GitHub issue ખોલશો નહીં
- GitHub Security Advisoriesનો ઉપયોગ કરો
- આ વિગતો સામેલ કરો: વર્ણન, પુનઃઉત્પાદનનાં પગલાં અને સંભવિત અસર
| તબક્કો | લક્ષ્ય |
|---|---|
| સ્વીકૃતિ | 48 કલાક |
| પ્રાથમિકતા નિર્ધારણ અને મૂલ્યાંકન | 5 કાર્યકારી દિવસ |
| પૅચ રિલીઝ | 14 કાર્યકારી દિવસ (ગંભીર નબળાઈ માટે) |
| વર્ઝન | સપોર્ટની સ્થિતિ |
|---|---|
| 3.8.x | ✅ સક્રિય |
| 3.7.x | ✅ સુરક્ષા |
| < 3.7.0 | ❌ અસમર્થિત |
OmniRoute બહુ-સ્તરીય સુરક્ષા મોડેલ અમલમાં મૂકે છે:
વિનંતી → CORS → Authz પાઇપલાઇન (વર્ગીકરણ → નીતિઓ → અમલીકરણ)
→ સુરક્ષા નિયંત્રણો (PII માસ્કર, પ્રોમ્પ્ટ ઇન્જેક્શન, વિઝન બ્રિજ)
→ દર મર્યાદાકારક → સર્કિટ બ્રેકર → કૂલડાઉન → મોડેલ લૉકઆઉટ → પ્રદાતા
| સુવિધા | અમલીકરણ |
|---|---|
| ડૅશબોર્ડ લૉગિન | JWT ટોકન (HttpOnly કુકીઝ) સાથે પાસવર્ડ-આધારિત પ્રમાણીકરણ |
| API કી પ્રમાણીકરણ | CRC માન્યતા સાથે HMAC-સહી કરેલી કીઓ |
| OAuth 2.0 + PKCE | પ્રદાતા-વિશિષ્ટ બ્રાઉઝર/ડિવાઇસ OAuth જ્યાં સમર્થિત હોય ત્યાં PKCEનો ઉપયોગ કરે છે; ફક્ત-આયાત Devin ઓળખપત્રો અલગથી સંભાળવામાં આવે છે. |
| ટોકન રિફ્રેશ | સમાપ્તિ પહેલાં સ્વચાલિત OAuth ટોકન રિફ્રેશ |
| સુરક્ષિત કુકીઝ | HTTPS પર્યાવરણો માટે AUTH_COOKIE_SECURE=true |
| 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/* સખત લૂપબૅક પૂરતું મર્યાદિત રહે છે. ROUTE_GUARD_TIERS જુઓ |
| MCP સ્કોપ્સ | 32 સૂક્ષ્મ સ્કોપ્સ (read:health, write:combos, execute:completions વગેરે) — docs/frameworks/MCP-SERVER.md જુઓ |
SQLiteમાં સંગ્રહિત તમામ સંવેદનશીલ ડેટા scrypt કી ડેરિવેશન સાથે AES-256-GCMનો ઉપયોગ કરીને એન્ક્રિપ્ટ કરવામાં આવે છે:
- API કીઓ, ઍક્સેસ ટોકન, રિફ્રેશ ટોકન અને ID ટોકન
- વર્ઝનયુક્ત ફૉર્મેટ:
enc:v1:<iv>:<ciphertext>:<authTag> - જ્યારે
STORAGE_ENCRYPTION_KEYસેટ ન હોય ત્યારે પાસથ્રૂ મોડ (સાદું લખાણ)
# એન્ક્રિપ્શન કી બનાવો:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)OmniRoute પ્રાથમિકતાના ક્રમમાં ગોઠવાયેલાં 3 બિલ્ટ-ઇન સુરક્ષા નિયંત્રણો સાથે હૉટ-રીલોડ કરી શકાય તેવી સુરક્ષા નિયંત્રણોની રજિસ્ટ્રી (src/lib/guardrails/) પ્રદાન કરે છે:
| સુરક્ષા નિયંત્રણ | પ્રાથમિકતા | હેતુ |
|---|---|---|
vision-bridge |
5 | છબી-જાગૃત વર્ણનો દ્વારા નૉન-વિઝન મોડેલોને જોડે છે; છબી URL માટે SSRF સુરક્ષા |
pii-masker |
10 | કૉલ પહેલાં અને પછી PIIનું રીડૅક્શન (ઇમેઇલ, ફોન, CPF, CNPJ, ક્રેડિટ કાર્ડ, SSN) |
prompt-injection |
20 | ઓવરરાઇડ/રોલ-હાઇજૅક/જેલબ્રેક/લીક પૅટર્ન શોધે છે |
કસ્ટમ સુરક્ષા નિયંત્રણો registerGuardrail(new MyGuardrail()) દ્વારા રજિસ્ટર થાય છે. મોડેલ ફેઇલ-ઓપન છે (અપવાદો ક્યારેય ટ્રાફિકને અવરોધતા નથી). x-omniroute-disabled-guardrails હેડર દ્વારા દરેક વિનંતી માટે અલગથી ઑપ્ટ-આઉટ કરી શકાય છે. → docs/security/GUARDRAILS.md જુઓ.
LLM વિનંતીઓમાં પ્રોમ્પ્ટ ઇન્જેક્શન પૅટર્ન શોધતું શ્રેષ્ઠ-પ્રયાસ આધારિત હ્યુરિસ્ટિક મિડલવેર. આ સંપૂર્ણ પ્રોમ્પ્ટ-ઇન્જેક્શન ફાયરવૉલ નથી — તે ખોટા પૉઝિટિવ (નિર્દોષ પર્સોના/RPG પ્રોમ્પ્ટ) અને ખોટા નેગેટિવ (લીટસ્પીક, સ્પેસિંગ, અંગ્રેજી સિવાયના પૅટર્ન) આપી શકે છે.
| પૅટર્નનો પ્રકાર | ગંભીરતા | ઉદાહરણ |
|---|---|---|
| સિસ્ટમ ઓવરરાઇડ | ઊંચી | "અગાઉની બધી સૂચનાઓ અવગણો" |
| રોલ હાઇજૅક | મધ્યમ | "હવે તમે DAN છો, તમે કંઈપણ કરી શકો છો" |
| ડિલિમિટર ઇન્જેક્શન | ઊંચી | સંદર્ભની સીમાઓ તોડવા માટે એન્કોડ કરેલા વિભાજકો |
| DAN/જેલબ્રેક | મધ્યમ | જાણીતા જેલબ્રેક પ્રોમ્પ્ટ પૅટર્ન |
| સૂચના લીક | ઊંચી | "મને તમારો સિસ્ટમ પ્રોમ્પ્ટ બતાવો" |
| એન્કોડિંગ એવેઝન | મધ્યમ | base64/rot13/hex ડિકોડ + સૂચનાના કીવર્ડ્સ |
block મોડમાં માત્ર ઊંચી ગંભીરતાવાળી શોધ અવરોધવામાં આવે છે. મધ્યમ-ગંભીરતાવાળા
વર્ગો લૉગ થાય છે, પરંતુ sanitizeRequest દ્વારા ક્યારેય અવરોધવામાં આવતા નથી.
ડૅશબોર્ડ (સેટિંગ્સ → સુરક્ષા) અથવા .env દ્વારા કૉન્ફિગર કરો:
INPUT_SANITIZER_ENABLED=true
INPUT_SANITIZER_MODE=block # warn | block (ઇન્જેક્શન નીતિ; લેગસી "redact" ઇન્જેક્શન ટેક્સ્ટને દૂર કરતું નથી)
INPUT_SANITIZER_BLOCK_THRESHOLD=high # high (ડિફૉલ્ટ) | medium | low — આ સ્તરે અથવા તેનાથી ઉપરની ગંભીરતાઓ block મોડમાં અવરોધવામાં આવે છેવ્યક્તિગત રીતે ઓળખી શકાય તેવી માહિતીની સ્વચાલિત શોધ અને વૈકલ્પિક રીડૅક્શન:
| 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] |
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 ઑડિટ | તમામ MCP ટૂલ કૉલ માટે SQLite-આધારિત ઑડિટ લૉગિંગ |
| Zod માન્યતા | મોડ્યુલ લોડ સમયે તમામ API ઇનપુટ Zod v4 સ્કીમા વડે માન્ય કરાય છે |
સર્વર શરૂ કરતા પહેલાં તમામ સિક્રેટ્સ સેટ કરેલા હોવા આવશ્યક છે. જો તે ખૂટતા અથવા નબળા હશે, તો સર્વર તરત નિષ્ફળ થશે.
# આવશ્યક — આના વિના સર્વર શરૂ થશે નહીં:
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 જેવા જાણીતા નબળા મૂલ્યોને સક્રિય રીતે નકારે છે.
- પ્રોડક્શનમાં non-root વપરાશકર્તાનો ઉપયોગ કરો
- સિક્રેટ્સને read-only volumes તરીકે માઉન્ટ કરો
.envફાઇલોને ક્યારેય Docker imagesમાં કૉપિ કરશો નહીં- સંવેદનશીલ ફાઇલોને બાકાત રાખવા માટે
.dockerignoreનો ઉપયોગ કરો - HTTPS પાછળ હોય ત્યારે
AUTH_COOKIE_SECURE=trueસેટ કરો
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ને આવરી લે છે) - નિર્ભરતાઓને અપડેટ રાખો
- પ્રોજેક્ટ pre-commit તપાસો માટે
husky+lint-stagedનો ઉપયોગ કરે છે (lint-staged + check-docs-sync + check:any-budget:t11) - CI pipeline દરેક push પર ESLint સુરક્ષા નિયમો ચલાવે છે (
no-eval,no-implied-eval,no-new-func= ભૂલ) - Zod દ્વારા module load સમયે provider constants માન્ય કરવામાં આવે છે (
src/shared/validation/schemas.ts) - ઉપયોગમાં લેવાતી મૂળભૂત રીતે સુરક્ષિત libraries:
dompurify/isomorphic-dompurify(XSS),jose(JWT),better-sqlite3(parameterized queriesને કારણે SQLiનું જોખમ નથી),bcryptjs(પાસવર્ડ hashing)
આ નિયમો tooling અને reviewers દ્વારા લાગુ કરવામાં આવે છે:
- સિક્રેટ્સ ક્યારેય commit કરશો નહીં —
.envgitignoreમાં છે;.env.exampletemplate છે (કોઈ literals નહીં, માત્ર comments — નીચે PUBLIC_CREDS.md જુઓ) eval(),new Function(), અથવા implied evalનો ક્યારેય ઉપયોગ કરશો નહીં — ESLint આને લાગુ કરે છે- સ્પષ્ટ operator મંજૂરી વિના Husky hooksને ક્યારેય bypass કરશો નહીં (
--no-verify,--no-gpg-sign) - Routesમાં ક્યારેય raw SQL લખશો નહીં — હંમેશાં
src/lib/db/મારફતે જાઓ (parameterized) - Inputsને હંમેશાં Zod વડે માન્ય કરો —
src/shared/validation/schemas.ts - Upstream headersને હંમેશાં sanitize કરો —
src/shared/constants/upstreamHeaders.tsમાં denylist - સંગ્રહિત credentialsને encrypt કરો —
src/lib/db/encryption.tsમારફતે AES-256-GCM resolvePublicCred()મારફતે સાર્વજનિક upstream OAuth identifiers — sourceમાં ક્યારેયAIza…/GOCSPX-…/…apps.googleusercontent.comliterals embed કરશો નહીં.docs/security/PUBLIC_CREDS.mdજુઓ.buildErrorBody()/sanitizeErrorMessage()મારફતે error responses — HTTP / SSE / executor / MCP response bodiesમાં ક્યારેય rawerr.stack/err.messageમૂકશો નહીં.docs/security/ERROR_SANITIZATION.mdજુઓ.envoption મારફતેexec()/spawn()runtime values — shellમાં મોકલાતી scriptsમાં external paths અથવા અવિશ્વસનીય valuesને ક્યારેય string-interpolate કરશો નહીં. સંદર્ભ:src/mitm/cert/install.ts::updateNssDatabases.- મૂળભૂત રીતે સુરક્ષિત librariesને પ્રાધાન્ય આપો — tldrsec/awesome-secure-defaults જુઓ (Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink). પોતાનું implementation બનાવતા પહેલાં તેનો ઉપયોગ કરો.
વ્યાપ નોંધ: રિપોઝિટરીના રૂટ પરની
socket.ymlફક્ત પ્રકાશિત npm આર્ટિફેક્ટના Socket.dev રજિસ્ટ્રી-સાઇડ પોસ્ટ-પબ્લિશ સ્કેન માટેprojectIgnorePathsને આકાર આપે છે — તે ફરજિયાત 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.dev GitHub App ફોર્મેટ v2 — જુઓ
https://docs.socket.dev/docs/socket-yml). તે સ્પષ્ટપણે
વિતરિત ન થતી ડિરેક્ટરીઓ (tests/, _tasks/, _references/, _ideia/,
_mono_repo/, docs/, વગેરે)ને બાકાત રાખે છે, જેથી સ્કેનર ફક્ત એવા કોડ પાથ્સ વિશે
રિપોર્ટ કરે જે ખરેખર પ્રકાશિત વપરાશકર્તાઓ સુધી પહોંચે — સ્કેન પોતે આ ફાઇલ વાંચતી Socket
GitHub App દ્વારા ચલાવવામાં આવે છે, આ રિપોઝિટરીના કોઈ વર્કફ્લો દ્વારા નહીં.
દરેક તારણની શ્રેણી માટે અમે તારણ-દીઠ મેઇન્ટેનર પ્રમાણન જાળવીએ છીએ:
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/architecture/AUTHZ_GUIDE.md— અધિકૃતતા પાઇપલાઇનdocs/security/GUARDRAILS.md— ગાર્ડરેલ્સ ફ્રેમવર્કdocs/security/COMPLIANCE.md— ઑડિટ લૉગ અને જાળવણીdocs/security/PUBLIC_CREDS.md— જાહેર અપસ્ટ્રીમ ક્રેડેન્શિયલ્સ માટેની ફરજિયાત પૅટર્નdocs/security/ERROR_SANITIZATION.md— ભૂલ પ્રતિસાદો માટેની ફરજિયાત પૅટર્નdocs/security/SOCKET_DEV_FINDINGS.md— સપ્લાય-ચેઇન સ્કેનરના તારણો માટે મેઇન્ટેનર પ્રમાણનdocs/architecture/RESILIENCE_GUIDE.md— સર્કિટ બ્રેકર + કૂલડાઉન + લૉકઆઉટdocs/security/STEALTH_GUIDE.md— TLS ફિંગરપ્રિન્ટિંગ (કાનૂની/નૈતિક સૂચના)CLAUDE.md— AI એજન્ટ્સ માટેના કડક નિયમો- tldrsec/awesome-secure-defaults — કાળજીપૂર્વક પસંદ કરેલી ડિફૉલ્ટ રૂપે સુરક્ષિત લાઇબ્રેરીઓ