¿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

Principios de diseño seguro

Después de esta lección: Puedo aplicar reglas básicas de diseño seguro para decidir dónde poner un límite en un sistema.

Lección de 55 min3 comandosLaboratorio de inyección SQL: ataca una búsqueda débil, corrige la consulta y demuéstralo

El diseño seguro limita el daño

El diseño seguro es el conjunto de decisiones que reducen el daño cuando un programa falla. Lo importante es que un error pequeño no abra todo el sistema.

Piensa en la web de matrícula de una universidad. Un solo fallo en el formulario no debería dejar leer las notas de todos.

Al final de esta lección

Nota

Puedo aplicar reglas básicas de diseño seguro para decidir dónde poner un límite en un sistema.

Palabras clave

PalabraQué significaEjemplo
Privilegio mínimodar a cada pieza solo el permiso que necesita
Frontera de confianzalínea donde los datos pasan de una zona a otrainternet / red interna
Fallar de forma seguraante un error, negar en lugar de permitir
Superficie de ataquetodo lo que un atacante puede tocar
Defensa en profundidadvarias barreras, no solo una

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

Cada pieza necesita solo su permiso

El privilegio mínimo es dar a cada cuenta, programa o servicio solo lo imprescindible. Si esa pieza se rompe o se engaña, el daño llega hasta donde llegaban sus permisos y no más.

Por eso la página que muestra el catálogo de una tienda no necesita poder borrar pedidos.

Ejemplo resuelto: qué permiso necesita cada pieza

PiezaQué hacePermiso justoPermiso de más
Buscador del catálogoLee productosLeer la tabla de productosEscribir o borrar
Formulario de pedidoCrea pedidosAñadir filas a pedidosLeer las cuentas de usuarios
Informe de ventasCuenta pedidosLeer pedidosCambiar precios

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

Una frontera separa zonas de distinto riesgo

Una frontera de confianza es el punto donde los datos pasan de una zona a otra. Lo que llega desde internet no es de fiar. Lo que circula dentro de la red interna se fía más.

En cada frontera hay que comprobar los datos. Marcar las fronteras en un dibujo es el primer paso del diseño.

Ante la duda, el sistema debe negar

Un sistema falla de forma segura si, cuando algo sale mal, se queda cerrado. Si la comprobación de permisos no responde, la petición se rechaza.

El diseño contrario abre la puerta cuando la cerradura se estropea. Sigue siendo un fallo, pero ahora pasa cualquiera.

Una comprobación que niega por defecto

Código: python
# Cambia role a "alumno" y pulsa Run. Luego a "profesor".
role = "visitante"
allowed = ["profesor", "secretaria"]
if role in allowed:
    print("puedes ver las notas")
else:
    print("acceso negado")

Mira la superficie de la tienda

Tu laboratorio tiene una tienda pequeña con un buscador. Cada dirección a la que responde forma parte de su superficie de ataque. Ejecuta estos tres comandos. Solo miran: piden la portada, una búsqueda normal y una dirección que no existe.

La regla única

Advertencia

Ataca solo tu copia privada del laboratorio, que no tiene salida a internet. Probar un sistema ajeno, o sin permiso, es delito en casi todos los países.

La portada de la tienda

Comando
curl -s http://app:8000/ | head -n 2

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una búsqueda normal

Comando
curl -s -G --data-urlencode "q=pen" http://app:8000/search

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una dirección que no existe

Comando
curl -s -o /dev/null -w "%{http_code}\n" http://app:8000/admin

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Qué te dicen las tres respuestas

El primero imprime <!doctype html> y <title>Corner Shop</title>. El segundo imprime Pen 1.2: el nombre y el precio. El tercero imprime 404, que significa que esa dirección no existe.

La tienda ofrece solo dos puertas, la portada y la búsqueda. Cuantas menos puertas, menos superficie.

Un error frecuente

Advertencia

Mucha gente cree que basta una sola barrera fuerte, como un cortafuegos. No es así. Una barrera puede fallar o saltarse. Con defensa en profundidad, cada capa limita el daño de la anterior: comprobar datos, permisos mínimos y registros.

Sobre este laboratorio y su código: Laboratorio de inyección SQL: ataca una búsqueda débil, corrige la consulta y demuéstralo

¿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.