🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇮🇳 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
ប្រភពត្រឹមត្រូវចម្បង:
open-sse/utils/publicCreds.tsការធ្វើតេស្ត:tests/unit/publicCreds.test.tsបានធ្វើបច្ចុប្បន្នភាពចុងក្រោយ: 2026-08-07 — v3.8.50 អ្នកអានគោលដៅ: វិស្វករដែលកំពុងរួមបញ្ចូលអ្នកផ្តល់សេវាដែលចែកចាយ OAuth client_id / client_secret / Firebase Web API keys សាធារណៈនៅក្នុង CLI សាធារណៈរបស់ពួកគេ។ ស្ថានភាព: ចាំបាច់ត្រូវអនុវត្ត សម្រាប់កូដថ្មីទាំងអស់ដែលបង្កប់អត្តសញ្ញាណករពីប្រភពខាងលើ។
- OAuth 2.0 សម្រាប់កម្មវិធីដើម (PKCE) — OAuth client_id / client_secret សម្រាប់កម្មវិធីដែលបានដំឡើងគឺជាព័ត៌មានសាធារណៈ; PKCE ផ្តល់សុវត្ថិភាពជាក់ស្តែង។
- Firebase API keys — អត្តសញ្ញាណកររបស់ Web client គឺសាធារណៈតាំងពីការរចនាដើម។
OmniRoute ត្រូវតែបង្កប់តម្លៃទាំងនេះ ដើម្បីឱ្យអ្នកប្រើដែលមិនបានកំណត់រចនាសម្ព័ន្ធ .env នៅតែទទួលបានដំណើរការ OAuth ដែលអាចប្រើបានភ្លាមៗ។ បើគ្មានតម្លៃជំនួសដែលបានបង្កប់ទេ អ្នកផ្តល់សេវា Gemini / Antigravity នឹងឈប់ដំណើរការសម្រាប់អ្នកប្រើណាម្នាក់ដែលអនុវត្តតាមផ្លូវ "គ្រាន់តែ clone ហើយ run"។
ទោះជាយ៉ាងណា តម្លៃផ្ទាល់ដូចជា AIzaSy…, GOCSPX-…, …apps.googleusercontent.com ត្រូវបានផ្គូផ្គងដោយ GitHub Secret Scanning, Semgrep និងកម្មវិធីស្កេនតាមលំនាំស្រដៀងគ្នា។ រាល់ការចេញផ្សាយក្លាយជាស្ទ្រីមនៃការជូនដំណឹងខុសដែលរំខាន, push protection រារាំង commit ដែលត្រឹមត្រូវ ហើយអ្នកប្រតិបត្តិការឈប់ជឿទុកចិត្តលើស្ទ្រីមការជូនដំណឹង។
ឧបករណ៍ជំនួយ open-sse/utils/publicCreds.ts ដោះស្រាយលក្ខខណ្ឌទាំងពីរក្នុងពេលតែមួយ៖
- បង្កប់អត្តសញ្ញាណករសាធារណៈជា លំដាប់ byte ដែលបានបិទបាំងដោយ XOR (គ្មានលំនាំសម្រាប់កម្មវិធីស្កេននៅក្នុងកូដប្រភព)។
- ឌិកូដនៅពេលដំណើរការតាមរយៈ
decodePublicCred/resolvePublicCred។ - រកឃើញតម្លៃឆៅដែលអនុវត្តតាមបុព្វបទដែលគេស្គាល់ជាទូទៅរួចហើយ (
AIza,GOCSPX-,<digits>-<32hex>.apps.googleusercontent.com,Iv1.<hex>) ហើយបញ្ជូនតម្លៃទាំងនោះបន្តដោយមិនផ្លាស់ប្តូរ ដូច្នេះអ្នកប្រើដែលមានតម្លៃឆៅនៅក្នុង.envដែលមានស្រាប់របស់ពួកគេ អាចបន្តដំណើរការដោយ មិនចាំបាច់ធ្វើការផ្លាស់ប្តូរទិន្នន័យអ្វីទាំងអស់។
នេះគឺជា ការបំភាន់ មិនមែនការអ៊ិនគ្រីបទេ។ អ្នកណាក៏ដោយដែលអានកូដប្រភព អាចយកតម្លៃនោះមកវិញបាន — ហើយវាមិនជាបញ្ហាទេ ព្រោះតម្លៃនេះគឺសាធារណៈតាំងពីការរចនាដើម។ គោលដៅតែមួយគត់គឺជៀសវាងការផ្គូផ្គង regex របស់កម្មវិធីស្កេន។
នៅពេលអ្នកត្រូវបង្កប់តម្លៃថ្មីដែលផ្តល់ដោយប្រភពខាងលើ ហើយតម្លៃនោះ៖
- បានមកពី CLI / កម្មវិធី desktop / browser bundle សាធារណៈ, ហើយ
- អ្នកផ្តល់សេវាប្រភពខាងលើបានចងក្រងជាឯកសារ (ឬចាត់ទុក) វាជាអត្តសញ្ញាណករ client សាធារណៈ, ហើយ
- កម្មវិធីស្កេនតាមលំនាំនឹងផ្គូផ្គងវា (
AIza…,GOCSPX-…,<digits>-…apps.googleusercontent.comជាដើម),
…សូមអនុវត្តតាមបញ្ជីត្រួតពិនិត្យនេះ៖
-
បង្កើតលំដាប់ byte ដែលបានបិទបាំង៖
node --import tsx/esm -e \ 'import("./open-sse/utils/publicCreds.ts").then(m => console.log(JSON.stringify(Array.from( Buffer.from(m.encodePublicCred("THE_PUBLIC_VALUE"), "base64") ))))'
-
បន្ថែមធាតុថ្មីទៅ
EMBEDDED_DEFAULTSនៅក្នុងopen-sse/utils/publicCreds.tsដោយប្រើ ឈ្មោះ key អព្យាក្រឹត (<provider>_id,<provider>_alt,<provider>_fbជាដើម)។ កុំ ប្រើឈ្មោះដូចជាclient_secretឬapi_keyនៅក្នុងឧបករណ៍ជំនួយ — ពាក្យទាំងនោះបង្កឱ្យច្បាប់ generic-secret របស់ Semgrep ដំណើរការ។ -
បន្ថែម
keyof typeof EMBEDDED_DEFAULTSទៅក្នុង public type union (វាត្រូវបានសន្និដ្ឋានដោយស្វ័យប្រវត្តិ)។ -
នៅក្នុងកូដប្រើប្រាស់ សូមជំនួសតម្លៃផ្ទាល់ដែលបានសរសេរជាប់ជាមួយ៖
// ការកំណត់ជំនួសតាម env តែមួយ clientSecret: resolvePublicCred("provider_alt", "PROVIDER_OAUTH_CLIENT_SECRET"), // ឈ្មោះក្លែងក្លាយ env ច្រើន (តម្លៃមិនទទេដំបូងឈ្នះ) clientId: resolvePublicCredMulti("provider_id", [ "PROVIDER_CLI_OAUTH_CLIENT_ID", "PROVIDER_OAUTH_CLIENT_ID", ]), // គ្មានការកំណត់ជំនួសតាម env (តែងតែប្រើតម្លៃលំនាំដើមដែលបានបង្កប់) firebaseApiKey: resolvePublicCred("provider_fb"),
-
លុបតម្លៃផ្ទាល់ចេញពី
.env.example(ជំនួសវាដោយឯកសារពន្យល់ដែលមានតែមតិយោបល់ និងណែនាំអ្នកអានមកទីនេះ)៖# ── អ្នកផ្តល់សេវា (Google / Firebase / ជាដើម) ── # ព័ត៌មានសម្គាល់ OAuth សាធារណៈត្រូវបានបង្កប់ក្នុងកូដតាមរយៈ # open-sse/utils/publicCreds.ts។ កំណត់អថេរទាំងនេះតែនៅពេលចង់ប្រើព័ត៌មានផ្ទាល់ខ្លួនរបស់អ្នកប៉ុណ្ណោះ។ # PROVIDER_OAUTH_CLIENT_ID= # PROVIDER_OAUTH_CLIENT_SECRET=
-
ធ្វើបច្ចុប្បន្នភាព
tests/unit/publicCreds.test.tsដើម្បីបន្ថែម shape assertion សម្រាប់ key ថ្មី (ផ្ទៀងផ្ទាត់ទម្រង់ មិនមែនតម្លៃផ្ទាល់ទេ — សូមមើលការធ្វើតេស្តដែលមានស្រាប់សម្រាប់លំនាំ)។ -
កុំដាច់ខាត បន្ថែមតម្លៃផ្ទាល់
AIza…/GOCSPX-…/…apps.googleusercontent.comទៅក្នុងឯកសារធ្វើតេស្ត។ ប្រើថេរFAKE_*ដែលបានបង្កើតពីបំណែក.join("")(សូមមើលការធ្វើតេស្តដែលមានស្រាប់)។
- អានតាមរយៈ
resolvePublicCred()/resolvePublicCredMulti()តែប៉ុណ្ណោះ — កុំហៅdecodePublicCredBytes()ដោយផ្ទាល់នៅខាងក្រៅឧបករណ៍ជំនួយ។ - ឧបករណ៍ជំនួយនេះត្រូវបានរៀបចំដោយចេតនាឱ្យចំណាយតិច (ប្រតិបត្តិការ XOR លើ byte តាមលំដាប់លីនេអ៊ែរ) និងមានសុវត្ថិភាពក្នុងការហៅនៅពេលផ្ទុក module; តម្លៃលំនាំដើមត្រូវបានគណនាតែម្តង។
- ការកំណត់ជំនួសតាម env តែងតែមានអាទិភាព។ ប្រសិនបើអ្នកប្រើកំណត់
PROVIDER_OAUTH_CLIENT_SECRET=GOCSPX-myownឧបករណ៍ជំនួយនឹងបញ្ជូនតម្លៃឆៅនោះបន្តដោយមិនផ្លាស់ប្តូរ។
❌ កុំដាច់ខាត ធ្វើសកម្មភាពណាមួយខាងក្រោមនៅក្នុងកូដ production (src/, open-sse/, electron/, bin/)៖
// មិនល្អ៖ តម្លៃផ្ទាល់បង្កឱ្យ Secret Scanning + Semgrep ដំណើរការ
clientSecret: process.env.PROVIDER_OAUTH_CLIENT_SECRET || "GOCSPX-realvalue",
// មិនល្អ៖ base64 នៃតម្លៃផ្ទាល់ — GitHub នៅតែរកឃើញចាប់តាំងពី Feb/2025
clientSecret: process.env.PROVIDER_OAUTH_CLIENT_SECRET ||
Buffer.from("R09DU1BYLXJlYWx2YWx1ZQ==", "base64").toString(),
// មិនល្អ៖ ការភ្ជាប់ string ដែលផ្គុំលំនាំឡើងវិញនៅពេលដំណើរការ
clientSecret: "GO" + "CS" + "PX-" + "realvalue",
// មិនល្អ៖ ការអ៊ិនកូដ hex/ROT13 — វិធីបំភាន់ផ្សេងគ្នា ប៉ុន្តែមានហានិភ័យត្រូវបានរកឃើញដូចគ្នា
clientSecret: hexDecode("474f4353..."),ទាំងអស់នេះនៅទីបំផុតនឹងបង្កឱ្យកម្មវិធីស្កេនដំណើរការ។ ប្រើ resolvePublicCred()។
❌ កុំដាច់ខាត បន្ថែមព័ត៌មានសម្គាល់ផ្ទាល់ទៅក្នុង .env.example។ អ្នកប្រើដែលត្រូវការតម្លៃពិតប្រាកដពីប្រភពខាងលើ អាចស្រង់យកវាពី CLI សាធារណៈដោយខ្លួនឯង ឬប្រើការចុះឈ្មោះ OAuth ផ្ទាល់ខ្លួនរបស់ពួកគេ។
❌ កុំដាច់ខាត ច្រានចោលការជូនដំណឹង secret-scanning ថ្មី ដោយមិនបានពិនិត្យជាមុនថាតើព័ត៌មានសម្គាល់នោះគួរត្រូវបានផ្លាស់ទីមកឧបករណ៍ជំនួយនេះឬអត់។
RAW_VALUE_PATTERNនៅក្នុងpublicCreds.tsរាយបញ្ជីបុព្វបទដែលបង្កឱ្យមានការបញ្ជូនតម្លៃដើមដោយផ្ទាល់ (សម្រាប់ភាពឆបគ្នាជាមួយកំណែចាស់)។ ពង្រីកវាតែសម្រាប់ទម្រង់ព័ត៌មានសម្ងាត់សាធារណៈដែលមានឯកសារបញ្ជាក់ប៉ុណ្ណោះ មិនត្រូវប្រើសម្រាប់ទិន្នន័យសម្ងាត់កម្មសិទ្ធិឡើយ។.env.exampleស្ថិតនៅក្នុងស្គ្រីបcheck-env-doc-syncរបស់ CI — នៅពេលអ្នកលុបអថេរមួយចេញពីទីនេះ ត្រូវប្រាកដថាឯកសារណែនាំត្រូវគ្នាផងដែរ។- សំណុំតេស្ត
npm run test:vitestនិងnode --import tsx/esm --test tests/unit/publicCreds.test.tsត្រូវតែបន្តឆ្លងកាត់ដោយជោគជ័យទាំងពីរ។
មុខងារជំនួយនេះគឺសម្រាប់តែព័ត៌មានសម្ងាត់ដែល៖
- ត្រូវបានចែកចាយជាសាធារណៈដោយអ្នកផ្តល់សេវាដើម (ឯកសារប្រតិបត្តិ CLI, កញ្ចប់សម្រាប់កម្មវិធីរុករក, ឯកសារណែនាំផ្លូវការ)។
- ត្រូវបានចងក្រងជាឯកសារ ឬបញ្ជាក់យ៉ាងច្បាស់ថាមិនមែនជាព័ត៌មានសម្ងាត់ (ការពារដោយ PKCE, Firebase Web key ឬស្រដៀងគ្នា)។
សម្រាប់អ្វីៗផ្សេងទៀត — ថូខឹនដែលចេញដោយប្រតិបត្តិករ, ទិន្នន័យសម្ងាត់សម្រាប់ tenant នីមួយៗ, client_secret របស់កម្មវិធី OAuth ផ្ទាល់ខ្លួនរបស់អ្នក, សោកូដនីយកម្ម, ទិន្នន័យសម្ងាត់ JWT, ពាក្យសម្ងាត់មូលដ្ឋានទិន្នន័យ — ប្រើតែ អថេរបរិស្ថានប៉ុណ្ណោះ (process.env.FOO, ប្រើ || ដើម្បីត្រឡប់ទៅតម្លៃទទេ / កំហុសជាក់លាក់)។ ទិន្នន័យទាំងនេះត្រូវដាក់ក្នុង .env និង ឃ្លាំងព័ត៌មានសម្ងាត់ដែលបានអ៊ិនគ្រីប មិនមែនក្នុងកូដប្រភពទេ។
- Google៖ OAuth 2.0 សម្រាប់កម្មវិធីដើម
- Firebase៖ API keys សម្រាប់កំណត់អត្តសញ្ញាណ client
- ព័ត៌មានសម្ងាត់ដែល GitHub Secret Scanning គាំទ្រ
- GitHub៖ ការរកឃើញ base64 សម្រាប់ថូខឹន (កុម្ភៈ 2025)
- Commit ដែលបានណែនាំមុខងារជំនួយនេះ៖
1a39c31f— fix(security): បិទបាំងព័ត៌មានសម្ងាត់សាធារណៈពីអ្នកផ្តល់សេវាដើម + ប្រមូលផ្តុំការសម្អាតកំហុសនៅកន្លែងតែមួយ