Créer une API REST sûre en PHP sans framework
Une petite API JSON pédagogique avec PDO, jetons opaques et autorisation par ressource.
Une petite API JSON pédagogique avec PDO, jetons opaques et autorisation par ressource.
Périmètre
Un contrôleur public unique traite GET, POST, PATCH et DELETE sur /api/items et /api/items/{id}. Les réponses restent en JSON ; une méthode non autorisée reçoit 405 avec Allow. Aucun autre fichier PHP ne doit être exposé par le serveur web.
Authentification
Créer des jetons aléatoires avec random_bytes(32), les montrer une seule fois et ne stocker que leur empreinte SHA-256 avec utilisateur, expiration et révocation. Accepter Authorization: Bearer sur HTTPS, interroger l’empreinte par requête paramétrée et répondre 401 en cas d’absence ou d’invalidité. Limiter les essais sans journaliser les jetons.
Autorisation et saisie
Chaque requête sur un objet doit filtrer aussi par utilisateur, par exemple WHERE id = :id AND user_id = :uid. Valider types et longueurs, choisir explicitement les champs modifiables et utiliser PDO avec requêtes préparées. Distinguer JSON incorrect (400), données invalides (422), opération interdite (403) et objet absent (404), sans exposer les erreurs internes.
Déploiement
Conserver les secrets hors du répertoire public, réduire les droits SQL, limiter la taille des requêtes, imposer HTTPS et protéger les journaux. CORS ne remplace pas l’autorisation. Tester deux comptes, les jetons expirés et les charges invalides.
Sources
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
Partager
Quelle est votre réaction ?
Aimer
0
Je n'aime pas
0
Amour
0
Drôle
0
En colère
0
Triste
0
Waouh
0