Mi chiedevo quali potrebbero essere alcuni dei potenziali abusi per un'API HTTP che accettava le query SQL e i set di risultati di output. Il fatto che questa sia la definizione canonica di SQL injection non mi è sfuggita:)
Nel mio caso, ho in mente una specifica applicazione PHP / MySQL che è Magento - una piattaforma di e-commerce.
Ecco alcune misure di sicurezza che ho preso in considerazione:
- Percorso URL non standard - per impedire la scansione di massa, ogni installazione dovrebbe avere il proprio percorso URL (questo è simile a come viene gestito il back-end di amministrazione di Magento)
- Un codice API di lunghezza discreta
- Accesso solo HTTPS
- Accesso in sola lettura tramite un utente MySQL di sola lettura.
- Accesso in sola lettura tramite analisi SQL. Richiederebbe un po 'meno di configurazione se l'accesso in sola lettura potesse essere implementato in questo modo. Stavo considerando semplicemente l'analisi delle query per "INSERT", "UPDATE", "DROP", ecc.
- Tabelle e campi nella lista nera. Per la maggior parte, i dati di configurazione sono memorizzati in una tabella denominata
core_config_data
, in modo che possa essere inserita nella lista nera. Anche cose come i token della carta di credito possono essere memorizzati in un campo specifico di una tabella specifica. In implementazioni molto povere, anche le carte di credito possono essere archiviate in chiaro, il che ovviamente dovrebbe essere inserito nella lista nera. - Tabella delle liste bianche e accesso ai campi - Forse solo consentire l'accesso alle tabelle e ai campi nella whitelist sarebbe un approccio migliore rispetto a una lista nera.
- Ci sono molte estensioni della community che potrebbero potenzialmente memorizzare anche informazioni sensibili. Sarebbe difficile bloccarli genericamente per impostazione predefinita, quindi penso che una whitelist potrebbe essere l'unica opzione da risolvere per questo.
- Alcuni meccanismi per un numero massimo / frequenza di tentativi
- Altre cose standard che vengono utilizzate per proteggere le connessioni SSH, ad esempio una whitelist IP, un'autenticazione a chiave pubblica, VPN, ecc.
Supponendo che queste misure siano state implementate, sarebbe sicuro o più sicuro di, diciamo, l'accesso SSH bloccato da una whitelist IP.
AGGIORNAMENTO: Poche più specifiche dell'applicazione, per dare seguito ad alcune delle domande nelle risposte.
- La cosa che sto cercando di costruire è un modulo Magento che verrà distribuito nello store e accetterà le query SQL per restituire i dati alla mia app SaaS. Possiedo sia il modulo che l'app SaaS.
- L'applicazione in questione sarebbe un'app SaaS che si collegava a Magento per inserire i dati. Quindi non è una situazione in cui solo i dipendenti fidati hanno accesso.
- Il livello minimo di sicurezza ideale (dal punto di vista della quantità di configurazione) sarebbe quello di non utilizzare un utente di sola lettura.
- Supponiamo che i falsi positivi che potrebbero essere bloccati non siano un problema (scusa, "Bobby Insert Tables").
UPDATE 2: Volevo solo dare un po 'di più alla ragione per cui ho scelto di inquadrare questa domanda in termini di confronto con una connessione SSH con una whitelist di indirizzi IP.
Una connessione SSH a tutti gli effetti è già funzionalmente uguale a un'API SQL raw (più molto di più) nel senso che è possibile connettersi a MySQl e quindi fare qualsiasi cosa. Quindi il mio pensiero è che se un'API SQL è sicura o più sicura di una connessione SSH, può presentare un livello di rischio accettabile.
Inoltre, so che questo tipo di domande può essere eccessivamente soggettivo, quindi ho voluto inquadrarlo in un modo che potesse avere una risposta relativamente obiettiva, motivo per cui volevo confrontarlo con uno specifico scenario SSH.