API REST in PHP senza framework: routing, token e autorizzazione

Una base didattica per API JSON in PHP con PDO, token opachi e controlli per risorsa.

API REST in PHP senza framework: routing, token e autorizzazione

Una base didattica per API JSON in PHP con PDO, token opachi e controlli per risorsa.

Il perimetro

Un solo front controller sotto la directory pubblica riceve GET, POST, PATCH e DELETE per /api/items e /api/items/{id}. Ogni richiesta e risposta usa JSON; metodi non previsti restituiscono 405 con intestazione Allow. Non esporre altri file PHP tramite il web server.

Autenticazione

Genera token casuali con random_bytes(32), mostra il valore una sola volta e salva soltanto hash SHA-256 nel database insieme a utente, scadenza e revoca. Accetta Authorization: Bearer su HTTPS, confronta hash con una query parametrizzata e restituisci 401 in caso di credenziali mancanti o non valide. Limita tentativi e registra eventi senza token.

Autorizzazione e dati

Autenticare non basta: ogni query per un elemento deve includere l’ID dell’utente autenticato, per esempio SELECT ... WHERE id = :id AND user_id = :uid. Per le scritture valida lunghezze e tipi, imposta i campi permessi esplicitamente e usa PDO con prepared statement ed eccezioni. Distingui JSON malformato (400), dati invalidi (422), accesso negato (403) e risorsa inesistente (404); evitare dettagli interni nelle risposte.

Messa in esercizio

Configura segreti fuori dalla web root, privilegi minimi per l’utente SQL, limiti alla dimensione del body, rate limiting, HTTPS e log protetti. CORS regola i browser, non sostituisce l’autorizzazione. Testa accesso incrociato fra due account, token scaduti, payload non validi e ripristino degli errori prima della pubblicazione.

Fonti

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

Share

What's Your Reaction?

Like Like 0
Cancella like Cancella like 0
Amore Amore 0
Buffo Buffo 0
arrabbiato arrabbiato 0
Sad Sad 0
Wow Wow 0