Nuskaitykite viešą puslapį dėl 25 rūšių nutekėjusių paslapčių
Programos, sukurtos vibe coding būdu, dažnai siunčia raktus į naršyklę. Įveskite vieno savo puslapio adresą, o skeneris perskaito to puslapio HTML ir susietus scenarijų failus, ieškodamas API raktų, žetonų ir duomenų bazių URL, kuriuos lankytojas galėtų nukopijuoti. Reikšmės rodomos užmaskuotos.
Rezultatas
Ko šis nuskaitymas nemato
Skeneris skaito tik failus, kuriuos lankytojo naršyklė atsisiunčia iš puslapio. Jis nemato paslapčių, kurios lieka serveryje, puslapių už prisijungimo, failų, vėliau įkeliamų per import(), ir source map. Švarus rezultatas nėra įrodymas, kad programa saugi.
Visos 25 raktų rūšys
Paslaptys, kurios niekada neturi patekti į naršyklę: 20. Vieši tyčia: 5.
Raktai, pažymėti kaip vieši, pavyzdžiui, Supabase anon raktas, Firebase apiKey ar Stripe publishable raktas, skirti naršyklėje. Jie saugūs tik tol, kol už jų esančius duomenis saugo jūsų duomenų bazės taisyklės.
| Rakto rūšis | ID | Svarba | Pobūdis |
|---|---|---|---|
| OpenAI API raktas | openai-key | Kritinė | Paslaptis |
| Anthropic API raktas | anthropic-key | Kritinė | Paslaptis |
| Stripe veikiantis slaptas raktas | stripe-secret | Kritinė | Paslaptis |
| Stripe bandomasis slaptas raktas | stripe-test-secret | Vidutinė | Paslaptis |
| Stripe publishable raktas | stripe-publishable | Info | Viešas tyčia |
| AWS prieigos rakto id | aws-access-key | Aukšta | Paslaptis |
| AWS slaptas prieigos raktas | aws-secret | Kritinė | Paslaptis |
| GitHub žetonas | github-token | Kritinė | Paslaptis |
| Google API raktas | google-api-key | Info | Viešas tyčia |
| Firebase žiniatinklio konfigūracijos apiKey | firebase-web-config | Info | Viešas tyčia |
| Supabase service_role raktas | supabase-service-role-jwt | Kritinė | Paslaptis |
| Supabase anon raktas | supabase-anon-jwt | Info | Viešas tyčia |
| JSON Web Token | jwt-other | Žema | Paslaptis |
| Supabase secret raktas | supabase-secret-key | Kritinė | Paslaptis |
| Supabase publishable raktas | supabase-publishable-key | Info | Viešas tyčia |
| Slack žetonas | slack-token | Kritinė | Paslaptis |
| Slack webhook URL | slack-webhook | Aukšta | Paslaptis |
| SendGrid API raktas | sendgrid-key | Kritinė | Paslaptis |
| Twilio API rakto sid | twilio-key | Aukšta | Paslaptis |
| Mailgun API raktas | mailgun-key | Aukšta | Paslaptis |
| Privataus rakto blokas | private-key-block | Kritinė | Paslaptis |
| Duomenų bazės URL su slaptažodžiu | database-url | Kritinė | Paslaptis |
| npm žetonas | npm-token | Kritinė | Paslaptis |
| Hugging Face žetonas | huggingface-token | Aukšta | Paslaptis |
| Resend API raktas | resend-key | Aukšta | Paslaptis |
Klausimai
Ką paslapčių skeneris skaito?
Jis skaito puslapio HTML ir iki 14 scenarijų failų, į kuriuos puslapis nurodo, iš viso 3 MB: pirmus 512 KB puslapio ir pirmus 1 MB kiekvieno failo. Ieško žinomų raktų formatų, pavyzdžiui, API raktų, prieigos žetonų, privačių raktų blokų ir duomenų bazių URL su slaptažodžiu.
Kur vyksta nuskaitymas ir kiek jis trunka?
Nuskaitymas vyksta jūsų naršyklėje; mūsų serveris tik atsiunčia jam failus, viena užklausa kiekvienam failui. Niekas nesaugoma. Lėtoje svetainėje nuskaitymas gali trukti iki maždaug pusantros minutės.
Ko skeneris nemato?
Paslapčių, kurios egzistuoja tik serveryje, puslapių už prisijungimo, kodo dalių, kurias puslapis vėliau įkelia per import(), ir source map. Jis taip pat negali pasakyti, ar rastas raktas vis dar aktyvus. Švarus rezultatas nėra įrodymas, kad programa saugi.
Kodėl kai kurie raktai pažymėti kaip vieši tyčia?
Supabase anon ar publishable raktas, Firebase apiKey, Google API raktas ir Stripe publishable raktas sukurti siųsti į naršyklę. Jie identifikuoja jūsų projektą ir suteikia tik tai, ką leidžia jūsų duomenų bazės taisyklės, API apribojimai ir serverio patikros. Apie juos pranešama, kad galėtumėte įsitikinti, jog tos taisyklės yra, o ne todėl, kad pats raktas būtų nutekėjimas.
Ką daryti, jei nutekėjo tikra paslaptis?
Pirmiausia ją pakeiskite: sukurkite naują raktą pas tiekėją ir panaikinkite seną. Tada perkelkite naują raktą į serverio kodą arba aplinkos kintamuosius ir įdiekite iš naujo. Rakto ištrynimo iš kodo nepakanka, nes sena reikšmė lieka ankstesniuose build, talpyklose ir git istorijoje.
Kodėl programos, sukurtos vibe coding būdu, taip dažnai atskleidžia raktus?
Greitai su AI įrankiais parašytas kodas dažnai kviečia mokamą ar privilegijuotą API tiesiai iš naršyklės, o raktas patenka į scenarijų, kurį atsisiunčia kiekvienas lankytojas. Vibe coding saugumas prasideda nuo to, kad tokie kvietimai liktų serveryje.