MariaDB - Protezione da iniezione SQL

Il semplice atto di accettare l'input dell'utente apre la porta agli exploit. Il problema deriva principalmente dalla gestione logica dei dati, ma fortunatamente è abbastanza facile evitare questi gravi difetti.

Le opportunità per l'iniezione di SQL si verificano in genere quando gli utenti immettono dati come un nome e la logica del codice non riesce ad analizzare questo input. Il codice, invece, consente a un utente malintenzionato di inserire un'istruzione MariaDB, che verrà eseguita sul database.

Considera sempre i dati inseriti dagli utenti, sospetti e necessitano di una forte convalida prima di qualsiasi elaborazione. Eseguire questa convalida tramite la corrispondenza del modello. Ad esempio, se l'input previsto è un nome utente, limitare i caratteri immessi a caratteri alfanumerici e trattini bassi e a una certa lunghezza. Rivedi un esempio fornito di seguito:

if(check_match("/^\w{8,20}$/", $_GET['user_name'], $matches)) {
   $result = mysql_query("SELECT * FROM system_users WHERE user_name = $matches[0]");
} else {
   echo "Invalid username";
}

Inoltre, utilizza l'operatore REGEXP e le clausole LIKE per creare vincoli di input.

Considerare tutti i tipi di controllo esplicito necessario dell'input come:

  • Controlla i caratteri di escape utilizzati.

  • Controllare i tipi di dati appropriati specifici per l'input. Limita l'input al tipo di dati e alla dimensione necessari.

  • Controlla la sintassi dei dati inseriti. Non consentire nulla al di fuori dello schema necessario.

  • Controlla i termini consentiti. Parole chiave SQL nella blacklist.

Potresti non conoscere i pericoli degli attacchi injection o considerarli insignificanti, ma sono in cima alla lista dei problemi di sicurezza. Inoltre, considera l'effetto di queste due voci:

1=1
-or-
*

Il codice che consente di immettere uno di questi insieme al comando corretto può comportare la rivelazione di tutti i dati utente sul database o l'eliminazione di tutti i dati sul database e nessuna delle due operazioni di iniezione è particolarmente intelligente. In alcuni casi, gli aggressori non passano nemmeno il tempo a esaminare i buchi; eseguono attacchi alla cieca con un semplice input.

Inoltre, considera gli strumenti di corrispondenza dei modelli e di espressioni regolari forniti da qualsiasi linguaggio di programmazione / scripting associato a MariaDB, che forniscono più controllo e talvolta un controllo migliore.