Com mantenir segures les claus d’API a la teva app
Per mantenir segures les claus d’API, guarda-les com a secrets o variables d’entorn al teu host, fes-les servir només al codi del servidor i no les enganxis mai al xat, als fitxers de codi, a les captures de pantalla ni a un repositori de Git. Dona a cada clau el mínim permís que necessiti, estableix límits de despesa al proveïdor i, si una clau es filtra, rota-la —crea’n una de nova i elimina l’antiga— en lloc de només amagar on ha aparegut.
Una clau d’API és una contrasenya d’un servei. La teva clau d’OpenAI permet a algú gastar els teus diners en IA; la teva clau secreta de Stripe permet emetre reemborsaments; la clau del teu proveïdor de correu permet enviar correus com si fossis tu. Els constructors d’apps amb IA són bons connectant-les, però no sempre tenen cura de on acaben, així que aquesta guia explica com mantenir-les segures i com comprovar-ho.
Claus públiques i claus secretes
No totes les claus són secretes. Conèixer la diferència evita que t’espantis per la clau equivocada i que ignoris la correcta.
| Tipus | Exemples | Pot estar al navegador? |
|---|---|---|
| Claus publicables / públiques | La clau pk_… de Stripe, una clau de mapes restringida al teu domini, alguns identificadors d’analítica | Sí; estan dissenyades per a això |
| Claus secretes | sk_… de Stripe, claus d’OpenAI i d’Anthropic, claus de proveïdors de correu, contrasenyes de bases de dades | Mai |
| Claus de servei/administració | Claus que salten les regles d’accés d’una base de dades allotjada | Mai; tracta-les com les més sensibles |
Si no saps de quin tipus és una clau, consulta la documentació del proveïdor. En cas de dubte, tracta-la com a secreta.
Pas 1: guarda les claus com a secrets, no al codi
Les claus pertanyen als ajustos de variables d’entorn o secrets del teu host. El teu codi les llegeix pel nom en temps d’execució (per exemple process.env.OPENAI_API_KEY), així que el valor mai apareix als teus fitxers. Per al context, consulta què són les variables d’entorn i els secrets.
Mou cada clau d’API fora del codi a variables d’entorn. Llista cada clau que has trobat, en quin fitxer estava i el nom de variable que has fet servir. No mostris els valors.
Despré, comprova que no n’ha quedat cap:
Cerca a tot el projecte, incloent-hi els fitxers de configuració i qualsevol fitxer .env, qualsevol cosa que sembli una clau d’API o una contrasenya. Informa del fitxer i de la línia, no del valor.
Pas 2: fes servir les claus secretes només al servidor
Aquesta és la regla més important. Tot el que rep el navegador, un visitant ho pot llegir: el codi font de la pàgina i els fitxers JavaScript són visibles a les eines de desenvolupador.
Per tant, si l’app ha de cridar OpenAI, el navegador ha de cridar el teu servidor, i el teu servidor crida OpenAI amb la clau. La clau mai surt del servidor.
La funció de xat crida OpenAI directament des del navegador. Mou aquesta crida a una ruta de l’API del servidor que llegeix OPENAI_API_KEY de l’entorn. El navegador només ha de cridar la nostra ruta. Requereix inici de sessió per a la ruta.
Hi ha una trampa habitual als frameworks de frontend: les variables amb un prefix públic —VITE_ a Vite, NEXT_PUBLIC_ a Next.js— s’integren al codi del navegador intencionadament. Una clau secreta amb un d’aquests prefixos queda exposada, encara que estigui «en una variable d’entorn».
Pas 3: comprova que no es filtra res
No confiïs que ho has fet bé: comprova el lloc en directe:
- Obre l’app publicada en un navegador.
- Obre les eines de desenvolupador i la pestanya Sources o Network.
- Cerca als fitxers els primers caràcters de cada clau secreta (per exemple
sk_osk-). - Revisa les peticions de xarxa que fa l’app. Una petició que va directament del navegador a un proveïdor d’IA de pagament és un senyal d’alarma.
Si trobes una clau secreta, porta-la al servidor (pas 2) i rota-la (pas 6), perquè ja era pública.
Pas 4: restringeix el que pot fer cada clau
Molts proveïdors permeten limitar una clau:
- Claus limitades o restringides que només poden fer el que necessita la teva app. Stripe, per exemple, admet claus restringides amb permisos específics.
- Restriccions de domini o d’IP per a les claus que han de ser públiques, com les de mapes.
- Claus separades per app i per entorn, perquè una filtració no exposi tot i revocar una no trenqui les altres.
- Claus de prova mentre construeixes, i claus reals només a l’app publicada.
Pas 5: posa un sostre al dany
Fins i tot una clau ben protegida es pot fer servir malament a través de la teva pròpia app: algú que executa un script contra la teva funció d’IA milers de vegades, per exemple.
- Estableix límits de despesa o alertes a cada proveïdor de pagament.
- Requereix inici de sessió per a qualsevol funció que costi diners per crida.
- Afegeix un límit de peticions per usuari. Consulta què és el límit de peticions.
Afegeix un límit de 30 peticions d’IA per usuari i hora a /api/chat. Retorna un missatge clar quan s’arribi al límit. Rebutja les peticions d’usuaris que no han iniciat sessió.
Pas 6: rota les claus que es filtren
Si una clau secreta apareix on no hauria, en un missatge de xat, un commit, una captura de pantalla, un tiquet de suport o codi del navegador, assumeix que està compromesa.
- Crea una clau nova al proveïdor.
- Actualitza el secret als ajustos de la teva app.
- Torna a desplegar o publica de nou perquè l’app en directe faci servir la clau nova.
- Elimina la clau antiga al proveïdor.
- Revisa els registres d’ús del proveïdor per veure activitat que no reconeixes.
Esborrar el missatge del xat o el commit de Git no és suficient. L’historial de Git guarda versions antigues, i tot el que ha estat públic pot haver estat copiat.
Errors habituals
- Enganxar una clau al prompt. Ara és a l’historial del xat. Fes servir un formulari de secrets.
- Un prefix públic en una variable secreta.
VITE_OPENAI_API_KEYenvia la clau a cada visitant. - Pujar un fitxer
.env. Assegura’t que és a.gitignoreabans del primer push. - Una clau per a tot. Fes servir claus separades per a proves i producció, i per a cada app.
- Cap límit de despesa. Una clau filtrada o abusada sense topall pot fer pujar la factura molt abans que ho notis.
- Amagar en lloc de rotar. Quan una clau ha estat exposada, només una clau nova la resol.
- Claus a les captures de pantalla. Retalla o difumina les pàgines de configuració abans de compartir-les per demanar ajuda.
Llista de comprovació
- Cada clau està guardada com a secret o variable d’entorn, no al codi.
- Cap fitxer
.envni cap clau és pujat a Git. - Les claus secretes només s’usen al codi del servidor.
- Cap variable secreta té un prefix públic com
VITE_oNEXT_PUBLIC_. - He buscat al JavaScript del lloc en directe el prefix de cada clau i no n’he trobat cap.
- Les claus estan limitades o restringides quan el proveïdor ho permet.
- Les claus de prova i les reals estan separades.
- Les funcions de pagament per ús requereixen inici de sessió i tenen límits per usuari.
- Cada proveïdor de pagament té un límit de despesa o una alerta.
- Sé com rotar cada clau, i qualsevol clau que alguna vegada s’hagi exposat ha estat rotada.
Mantenir les claus segures a Mythex
Mythex manté les claus fora del codi i del xat de dues maneres:
- Targeta de sol·licitud de secrets. Quan l’agent necessita una clau, mostra una targeta al xat on introdueixes el valor en camps de formulari, no al quadre de missatges, i es guarda com a secret del projecte. Consulta Secrets al xat.
- Configuració del projecte → Secrets, o
/secretsal xat, per afegir o canviar claus tu mateix. Consulta Variables d’entorn i secrets.
Despré de canviar un secret d’una app publicada, publica de nou perquè l’app en directe faci servir la nova clau. Les apps exportades no inclouen els secrets, així que torna-los a afegir allà on executis el codi a continuació. Si una clau apareix alguna vegada al xat, rota-la al proveïdor.
Per a la resta de la revisió de seguretat abans del llançament, segueix la llista de comprovació de seguretat per a apps creades amb IA. Si afegeixes funcions d’IA, com fer servir les APIs de LLM explica les claus i els costos amb més profunditat.
Preguntes
És segur posar una clau d’API al codi del frontend?
Només si el proveïdor ha dissenyat aquesta clau per ser pública, com la clau publicable de Stripe o una clau de mapes restringida al teu domini. Qualsevol clau que pugui gastar diners o llegir dades privades ha de quedar-se al servidor, perquè tot el que s’envia al navegador es pot llegir.
Què faig si he enganxat una clau d’API en un xat o en un repositori públic?
Rota-la: crea una clau nova al proveïdor, actualitza els secrets de la teva app, publica de nou i després elimina la clau antiga. Esborrar el missatge o el commit no és suficient, perquè ja poden existir còpies.
On s’han de guardar les claus d’API?
A les variables d’entorn o als ajustos de secrets del teu host, que llegeix el codi del servidor en execució. No s’han d’escriure als fitxers de codi, pujar a Git ni aparèixer a captures de pantalla.
Com sé si la meva clau d’API està exposada al meu lloc web?
Obre el teu lloc en directe, mira el codi font de la pàgina i els fitxers JavaScript a les eines de desenvolupador del navegador, i cerca l’inici de la clau. Si hi apareix, està exposada i cal portar-la al servidor i rotar-la.