¿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

Revisión de código seguro

Después de esta lección: Puedo revisar un cambio de código con una lista de comprobación y señalar las líneas de riesgo.

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

Revisar código es leer un cambio buscando fallos

La revisión de código es leer el trabajo de otra persona antes de aceptarlo, para encontrar fallos de seguridad cuando todavía es barato arreglarlos. Con una lista de comprobación, una revisión es más rápida y más fiable.

Una academia en línea recibe un cambio que añade un buscador. Quien lo revisa decide si entra o vuelve a su autor.

Al final de esta lección

Nota

Puedo revisar un cambio de código con una lista de comprobación y señalar las líneas de riesgo.

Palabras clave

PalabraQué significaEjemplo
Revisión de códigolectura de un cambio por otra persona
Difflista de líneas quitadas y añadidas+ nueva línea
Lista de comprobaciónpreguntas que se repiten en cada revisión
Línea de riesgolínea que puede causar un fallo de seguridad
Falso positivoaviso que no era un fallo real

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

Una lista de comprobación evita olvidar preguntas

Quien revisa se cansa y se olvida de cosas. Una lista fija hace las mismas preguntas en cada cambio. Cada pregunta viene de una lección de este módulo.

No hace falta entender todo el programa. Hace falta mirar los sitios donde el programa recibe datos, guarda secretos o decide permisos.

Ejemplo resuelto: la lista y qué buscar

PreguntaQué buscar en el códigoLección
¿Se comprueba la entrada?Datos usados sin ninguna comprobaciónValidar la entrada
¿Se monta una consulta con texto?Un SELECT con signos + o texto pegadoConsultas con parámetros
¿Hay secretos?Claves y contraseñas escritas entre comillasDependencias y secretos
¿Cómo se guardan las claves?Hashes débiles o texto planoContraseñas y sesiones
¿Qué ocurre si falla?Errores mostrados al usuarioDiseño seguro

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

Primero se leen las líneas añadidas

Un diff muestra lo que cambia. Las líneas con - se quitan y las que llevan + se añaden. Lo nuevo es lo que puede traer fallos.

Lee cada línea añadida con la lista en la mano. Si una te sorprende, pregunta a su autor: puede que tenga una razón.

Un cambio para revisar (ejemplo inventado)

Código: python
# Ejemplo inventado: un cambio que añade un buscador a una academia.
- def search(term):
-     return []
+ def search(term):
+     db_password = "academia2024"
+     order = "SELECT name FROM courses WHERE name = '" + term + "'"
+     return run(order, db_password)

Dos líneas añadidas son de riesgo

En el cambio anterior, la línea con db_password guarda una contraseña entre comillas en el código. Eso es un secreto en el código.

La línea con order monta una consulta sumando texto del usuario. Eso es una inyección posible. La línea del return no es un fallo por sí sola.

Oriéntate antes de leer la tienda

Un buen revisor se orienta antes de leer línea a línea. Ejecuta estos tres comandos en tu laboratorio. Solo miran. Cuentan las importaciones, las funciones y los sitios que atrapan errores del programa original de la tienda.

La regla única

Advertencia

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

Cuántas líneas importan módulos

Comando
docker exec app grep -c "import" /tmp/app/app.py

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

Cuántas funciones define

Comando
docker exec app grep -c "def " /tmp/app/app.py

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

Cuántos sitios atrapan un error

Comando
docker exec app grep -c "except" /tmp/app/app.py

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 3: tres módulos importados. El segundo imprime 5: cinco funciones. El tercero imprime 1: un solo sitio atrapa errores. Si alguien ya editó el programa, los números pueden cambiar.

Con cinco funciones, el revisor empieza por la que recibe datos y la que habla con la base.

Un error frecuente

Advertencia

Mucha gente cree que una herramienta que no avisa de nada garantiza que el código es seguro. No es así. Una herramienta solo busca lo que conoce y también da falsos positivos. Úsala como ayuda y lee tú el código con la lista.

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.