2009-12-26 8 views
12

Nelle query MySQL, quanto è importante inserire i backtick attorno al nome di una tabella. Ha qualcosa a che fare con la sicurezza? Gli attacchi di iniezione di MySQL sono possibili attraverso il nome della tabella se il nome della tabella viene creato dinamicamente in PHP in base agli input dell'utente?Importanza del backtick attorno al nome della tabella nella query MySQL

risposta

15

Gli apici inversi si aiutano accidentalmente utilizzando un nome che è una parola riservata in SQL, per esempio. Prendi un tavolo chiamato "dove", è un nome stupido per un tavolo, sono d'accordo, ma se lo avvolgi in apici inverso funzionerà bene.

+5

Questo succede molto quando si ha un campo chiamato 'password'. –

+0

Grazie, ho imparato qualcosa di nuovo. Immagino che contrassegnare una colonna chiamata "ordine" con i backtick eviterebbe anche di scontrarsi con quella parola riservata. – eoinoc

+0

Abbiamo bisogno di usarli anche in PostgreSQL? –

3

Se si dispone di un nome di tabella con lo stesso nome di una parola chiave, ad es. selezionare, la seguente query continua a funzionare:

select * from `select`; 
10

Nelle query MySQL, quanto è importante inserire i backtick attorno al nome di una tabella. Ha qualcosa a che fare con la sicurezza ?

Per quanto riguarda i backtick, li uso quando c'è un conflitto di nomi tra i nomi di mysql-specifcs e quelli di query.

Sono MySQL attacchi di iniezione possibili attraverso il nome della tabella, se il nome della tabella viene creata in modo dinamico in PHP sulla base di input dell'utente?

Quando c'è un input da parte dell'utente, è necessario assicurarsi di filtrare e convalidare l'input proveniente dall'utente. Quindi sì, c'è un rischio per la sicurezza.

ti consiglierei di utilizzare intval per i numeri e mysql_real_escape_string funzione per tutte le variabili che si possono utilizzare nelle query.

+2

Per aggiungere a questa risposta ... QUALSIASI MOMENTO una variabile viene inserita in una stringa SQL, è un'opportunità per un'iniezione SQL. E non importa da dove provengano questi dati, nulla è mai veramente sicuro. Scappa sempre tutto. – TravisO

+0

@TravisO: d'accordo e grazie per aver aggiunto che :) – Sarfraz

+2

Qualcosa che ho imparato di recente, mysql_real_escape_string() non sfugge ai backtick. Se stai usando una variabile PHP come nome di una tabella, allora può essere sfruttata. – Noodles

Problemi correlati