La puerta del bar
Al cerrar el bar echas la llave. No porque pienses que todos son ladrones.
Lo haces porque una puerta abierta es una invitación. Con una web pasa igual.
En esta lección verás tres defensas básicas. Con ellas tu web cierra la puerta a los fallos más comunes.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Hash | Una huella de una contraseña. No se puede deshacer para recuperar la contraseña. | Una cadena larga de letras |
| Sal | Un texto al azar que se añade a la contraseña antes de hacer el hash. | Distinta para cada usuario |
| Inyección SQL | Un fallo en el que el texto de un usuario cambia lo que hace una consulta. | Consulta con texto pegado |
| Consulta preparada | Una consulta con huecos. Los valores van aparte y nunca se mezclan con la orden. | WHERE email = ? |
| XSS | Un fallo en el que una web enseña texto de un usuario como si fuera código de la página. | Un comentario con etiquetas |
| Escapar | Cambiar los signos especiales por texto inofensivo antes de enseñarlos. | < pasa a < |
| Validar | Comprobar en el servidor que un dato tiene la forma que esperas. | Una edad es un número |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cómo guardar contraseñas
| Forma | Qué se guarda | Si roban la base de datos |
|---|---|---|
| Texto claro | La contraseña tal cual | Se leen todas. Es el peor caso |
| Cifrada con una llave | La contraseña mezclada | Si roban también la llave, se leen todas |
| Hash con sal | Una huella distinta por usuario | No se pueden leer y cuesta mucho adivinarlas |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Repaso rápido: contraseñas
Inténtalo
Repaso rápido: contraseñas
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.
Consultas con huecos
Una web guarda datos en una base de datos y los pide con consultas SQL.
El error es pegar el texto del usuario dentro de la consulta. Entonces el usuario puede cambiar lo que la consulta hace. Eso es una inyección SQL.
La defensa es dejar un hueco ? y pasar el valor aparte.
La consulta mal y bien, en Java
// MAL: el texto del usuario se pega dentro de la consulta
String bad = "SELECT * FROM users WHERE email = '" + email + "'";
// BIEN: la consulta lleva un hueco y el valor va aparte
String sql = "SELECT * FROM users WHERE email = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, email);
ResultSet rows = statement.executeQuery();
Lo mismo en PHP
<?php
// La consulta lleva un hueco y el valor va aparte
$statement = $pdo->prepare('SELECT * FROM users WHERE email = ?');
$statement->execute([$email]);
$rows = $statement->fetchAll();
Repaso rápido: consultas
Inténtalo
Repaso rápido: consultas
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.