API REST seguras en PHP sin framework
Una pequeña API JSON didáctica con PDO, tokens opacos y autorización por recurso.
Una pequeña API JSON didáctica con PDO, tokens opacos y autorización por recurso.
Alcance
Un controlador público único atiende GET, POST, PATCH y DELETE en /api/items y /api/items/{id}. Responde siempre con JSON y usa 405 con Allow para métodos no admitidos. Evita exponer otros archivos PHP al servidor web.
Autenticación
Genera tokens aleatorios con random_bytes(32), muéstralos una sola vez y guarda únicamente su hash SHA-256 junto con usuario, caducidad y revocación. Acepta Authorization: Bearer por HTTPS, busca el hash con consulta parametrizada y responde 401 si falta o no vale. Limita intentos sin registrar tokens.
Autorización y datos
Toda consulta a un objeto debe filtrar por usuario autenticado, como WHERE id = :id AND user_id = :uid. Valida tipos y longitudes, define los campos modificables y usa PDO con sentencias preparadas. Diferencia JSON defectuoso (400), datos inválidos (422), operación prohibida (403) y objeto ausente (404), sin mostrar errores internos.
Despliegue
Guarda secretos fuera de la carpeta pública, concede privilegios SQL mínimos, limita el tamaño de la petición, exige HTTPS y protege registros. CORS no sustituye la autorización. Prueba accesos cruzados entre cuentas, tokens vencidos y cargas incorrectas.
Fuentes
https://www.php.net/manual/en/book.pdo.php ; https://www.php.net/manual/en/function.random-bytes.php ; https://cheatsheetseries.owasp.org/cheatsheets/REST_Security_Cheat_Sheet.html
Compartir
¿Cuál es tu reacción?
Me gusta
0
No me gusta
0
Me encanta
0
Divertido
0
Enfadado
0
Triste
0
¡Vaya!
0