Mysql
 sql >> Database >  >> RDS >> Mysql

Il modo migliore per proteggere le query SQL in PHP

La query che hai mostrato nella domanda non utilizza i valori forniti dall'utente, quindi non esiste un caso di SQL Injection ma in un caso generale:-

Innanzitutto, devi convalidare tutti l'input dell'utente (nomi utente, e-mail, ecc.) prima di utilizzarlo in una query. Ad esempio:- Se hai consentito solo caratteri alfanumerici in un nome utente, devi verificare se l'input è effettivamente alfanumerico o meno prima di procedere alla creazione di una query del database e devi anche controllare la dimensione di tutti gli input.

Dopodiché, a mio avviso, le istruzioni preparate sono la scelta migliore per prevenire l'iniezione di SQL.

Problema con mysql_real_escape_string():-

Poiché mysql_real_escape_string() esegue l'escape dei caratteri in base al set di caratteri predefinito, quindi è meglio della funzione addlashes() e disinfetta correttamente Iniezioni SQL derivanti dall'abuso di set di caratteri multibyte , ma in un altro articolo qui , viene mostrato uno scenario alternativo che spiega che l'iniezione può ancora essere eseguita.

Soluzione:-

Quindi il modo corretto e migliore per prevenire l'iniezione di SQL è utilizzare istruzioni preparate. È una tecnica in cui le istruzioni SQL vengono precompilate prima dell'inserimento dell'input utente (parametri) e vengono trattate come modelli SQL riutilizzabili. Quindi, separa l'input dell'utente dal codice SQL effettivo e l'analizzatore SQL non analizza mai l'input dell'utente.

Oltre alla sicurezza, ottimizza anche la velocità della query SQL. Aiuta nei casi in cui è necessario eseguire la stessa query più volte con input utente diversi.

Puoi fare riferimento al manuale PHP per i dettagli sull'implementazione.