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.

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.

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 Aimer 0
Je n'aime pas Je n'aime pas 0
Amour Amour 0
Drôle Drôle 0
En colère En colère 0
Triste Triste 0
Waouh Waouh 0