Lo que pegas sale de tu ordenador
Usar un asistente de código con seguridad y privacidad es decidir qué datos le das y revisar qué fallos de seguridad trae lo que devuelve. Lo que escribes en una petición viaja a otro servidor junto con tu código.
Un equipo de una gestoría de Bilbao pega un archivo de configuración entero para pedir ayuda. El archivo incluye la clave de su base de datos.
Al final de esta lección
Nota
Puedo decir qué no debo pegar en un asistente y qué fallos de seguridad debo buscar en lo que genera.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Secreto | dato que da acceso y no debe verlo nadie más | una contraseña |
| Dato personal | dato que identifica a una persona | |
| Inyección SQL | texto de un usuario que cambia una consulta | |
| Dependencia | una biblioteca de otra persona que usa tu programa | |
| Variable de entorno | un valor que el sistema guarda fuera del código |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
No pegues secretos ni datos de otras personas
Una petición se envía a un servicio externo con todo su contexto. Trátala como un mensaje que sale de tu empresa o de tu centro.
No pegues contraseñas, claves de acceso, ni datos reales de clientes o estudiantes. Si necesitas ayuda con un archivo, cambia antes cada secreto por un valor falso.
Ejemplo: qué pegar y qué no
| Contenido | ¿Se pega? | Qué haces en su lugar |
|---|---|---|
| Una función sin datos reales | Sí | Nada: es lo que quieres enseñar |
| La clave de tu base de datos | No | Escribe "CLAVE_FALSA" en su lugar |
| Una lista de clientes con nombres | No | Inventa tres filas de ejemplo |
| El error de una consola | Sí, revisado | Quita rutas y nombres de personas |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que un secreto pegado por error queda a salvo si borra la conversación. No es así. Una vez enviado, trátalo como visto por otras personas: cámbialo de inmediato y avisa a quien administra el sistema.
El código generado repite fallos de seguridad conocidos
Un asistente copia patrones de mucho código, y parte de ese código es inseguro. Por eso conviene buscar los mismos fallos que en cualquier otro código.
Los más habituales son tres. Una consulta montada con texto del usuario, una clave escrita en el código y una dependencia que no existe.
Dos formas de escribir una consulta
# Ejemplo inventado: dos formas de escribir una consulta. Solo se imprimen textos.
def consulta_insegura(nombre):
return "SELECT * FROM clientes WHERE nombre = '" + nombre + "'"
print(consulta_insegura("Ana"))
print(consulta_insegura("x' OR '1'='1"))
# La segunda forma deja el dato aparte, con un parámetro ?
consulta_segura = "SELECT * FROM clientes WHERE nombre = ?"
print(consulta_segura)
# Mira cómo la segunda línea impresa devuelve todos los clientes.
Ejemplo: cuatro fallos y su arreglo
| Fallo | Cómo se ve | Arreglo |
|---|---|---|
| Inyección SQL | Una consulta que suma texto del usuario | Consultas con parámetros |
| Secreto en el código | password = "abc123" entre comillas | Leerlo de una variable de entorno |
| Dependencia dudosa | Un paquete con nombre raro que no conoces | Buscarlo y mirar quién lo mantiene |
| Resumen débil | Guardar contraseñas con un hash antiguo | Usar una función pensada para contraseñas |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Mira la configuración y busca secretos
Estas órdenes solo miran, y nadie escribe ningún secreto. La primera enseña el valor de relleno de la configuración del agente: la clave real nunca está en el archivo ni la ve el estudiante. La segunda es un ejemplo con un texto falso. La tercera busca palabras de secreto en el programa de la cantina.
Mira el valor de relleno de la clave
docker exec agent grep apiKey /home/node/.config/opencode/opencode.jsonSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Busca secretos en un texto de ejemplo
printf 'host = "db"\npassword = "abc123"\nuser = "ana"\n' | grep -n -i -E "password|secret|token"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Busca esas palabras en el programa
docker exec -w /home/node/project agent grep -c -i -E "password|secret|token|apikey" shop.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.