Questo è un follow up di una domanda che ho postato su Stack Overflow ma non hai bisogno di leggere quella domanda - Sto ricapitolando i dettagli pertinenti qui.
Sto testando un'applicazione PHP che utilizza un database MySQL come archivio dati. Sto usando le query parametrizzate esclusivamente, tramite una libreria ORM.
Ho scoperto che una particolare richiesta POST con un payload come questo:
id=3-2&value=whatever
modificherà la riga del database dove id = 3
. Dopo alcune indagini, è stato determinato che il valore "3-2" è passato al database (tramite una query parametrizzata) e seleziona la riga dove id = 3
, che viene quindi aggiornata.
Ora mi sembra che questo sia un difetto di sicurezza: sono in grado di manipolare i dati nel mio database inserendo un valore arbitrario per il parametro id
. Certo, l'intervallo di valori per cui questo tipo di attacco è possibile è limitato: il parametro ID deve essere una stringa preceduta da un numero e quel numero deve corrispondere a un ID nel mio database.
Quindi ho due domande:
-
È davvero un difetto di sicurezza di cui dovrei preoccuparmi?
-
A quale livello dovrebbe essere indirizzato nella mia applicazione?
- Il server MySQL, forse cambiando alcuni valori di configurazione?
- La libreria ORM, forse controllando il valore dell'ID usato prima di tentare di interrogare il database?
- Nel mio codice, prima ancora di provare a creare un'istanza del modello?
Grazie per il tuo aiuto! Sto appena iniziando a conoscere sicurezza e amp; qualsiasi input sarà utile!