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.
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
0
Cancella like
0
Amore
0
Buffo
0
arrabbiato
0
Sad
0
Wow
0