¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Secretos fuera del código

Después de esta lección: Puedo mantener los secretos fuera del código.

Lección de 50 minSin comandos

Una clave publicada sin querer

Un programador de una empresa de reparto en Málaga sube su código a un repositorio público. Dentro del código está la contraseña de la base de datos.

A las pocas horas, un programa automático la encuentra. Esa noche alguien descarga las direcciones de todos los clientes.

Borrar la línea al día siguiente no sirve: la contraseña sigue en el historial.

Al final de esta lección

Nota

Puedo mantener los secretos fuera del código.

Palabras clave

PalabraQué significaEjemplo
Secretodato que da acceso, como una contraseña o una clave
Variable de entornovalor que el sistema da al programa al arrancarDB_PASSWORD
Archivo .envarchivo local con los secretos, fuera del repositorio
.gitignorelista de archivos que Git no sube
Validarcomprobar que una entrada tiene la forma esperada

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un secreto vive fuera del código

El código se copia, se comparte y se sube a repositorios. Todo lo que lleva dentro acaba viéndolo mucha gente.

Por eso el secreto se guarda aparte. En tu ordenador va en un archivo .env, apuntado en el .gitignore. En el servidor lo pone el sistema como variable de entorno.

El programa solo lee el nombre de la variable. Nunca ve el secreto escrito en su código.

Prueba: un secreto en un archivo .env

Código: bash
mkdir -p tienda && cd tienda
# El secreto vive en un archivo .env que no se sube al repositorio
printf 'DB_PASSWORD=Tortilla-2026\n' > .env
printf '.env\n' > .gitignore

# Carga el archivo y deja la variable lista para los programas
set -a; . ./.env; set +a
echo "La contraseña mide ${#DB_PASSWORD} caracteres"

cat .gitignore
# Añade API_KEY=abc123 al .env con printf y muestra su longitud.

Prueba: leer el secreto desde Python

Código: python
import os

# En un servidor real, esta línea la pone el sistema, no el código
os.environ["DB_PASSWORD"] = "Tortilla-2026"

if "DB_PASSWORD" in os.environ:
    password = os.environ["DB_PASSWORD"]
    print("Conectando con una contraseña de", len(password), "caracteres")
else:
    print("Falta DB_PASSWORD: el programa se para")

# Nunca imprimas el secreto entero en un log.
# Borra la línea de os.environ y vuelve a ejecutar.

Un error frecuente

Advertencia

Mucha gente cree que basta con borrar la contraseña en un commit nuevo. El commit anterior la sigue guardando. Si un secreto llega a un repositorio, cámbialo de inmediato, porque hay que darlo por robado.

Ninguna entrada es de fiar

Un formulario, un archivo subido o una dirección web traen datos de fuera. Pueden traer cualquier cosa.

Antes de usar una entrada, valídala. Lo más seguro es una lista de lo que se permite: la forma, la longitud y los caracteres esperados.

Todo lo demás se rechaza. Es más fácil decir qué es correcto que adivinar todos los ataques.

Ejemplo: validar un código postal

Entrada¿5 cifras?¿Provincia 01 a 52?Resultado
28013SíSí, 28Se acepta
2801NoNo se miraSe rechaza
60100SíNo, 60Se rechaza
1' OR '1'='1NoNo se miraSe rechaza

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.