2012-11-19 2 views
22

Ho appena incontrato uno sviluppatore che ha anteposto ogni nome di tabella e colonna nei suoi database MYSQL con un trattino basso (ad es. _users, _name, _active). Quando ho messo in discussione la pratica, ha affermato che questo aiuta a prevenire attacchi di SQL injection - Non ho mai incontrato prima questa pratica/consiglio. In che modo aiuta a prevenire attacchi di SQL injection?I nomi di tabelle e colonne del database SQL difficili da indovinare aiutano a prevenire l'SQL injection?

+0

L'unica cosa che riuscivo a pensare che avrebbe aiutato contro è se l'attaccante sta tentando di indovinare i nomi delle tabelle. Ma con un'adeguata igiene degli input del database, dovrebbe essere completamente inutile. Tutto ciò che farà è confondere i tuoi sviluppatori. – Travesty3

+4

Speriamo che condividerai questa pagina con lui. – MikeSmithDev

+4

Paranoid Dev? Forse, forse no. Dev Incompetant? Molto probabilmente. – MatBailie

risposta

29

No.

Il suo pensiero va "Se l'attaccante non conosce il nome dei miei tavoli, quindi l'attaccante non può pasticciare con loro." Tuttavia, sei ancora vulnerabile all'iniezione SQL e l'utente malintenzionato può comunque causare chiamate di sistema arbitrarie, magari a tabelle di sistema ben note. Cosa succede se aggiunge un codice SQL che causa query molto lunghe su una tabella di sistema che impantana il server?

La sicurezza attraverso l'oscurità non è affatto la sicurezza.

+6

+1 per menzionare le tabelle di sistema. Se l'attaccante non viene a conoscenza del nome del tuo cucciolo, ma può cancellare o corrompere l'intero database, è importante? (Ok, per informazioni sensibili, come le informazioni sulle carte di credito, potrebbe ...). Per non parlare, interrogando i metadati, si può facilmente decifrare questo schema _clever_ ... – ppeterka

+0

Grazie per il chiarimento Andy (e la citazione apt). Non avevo pensato ai tavoli di sistema! – foiseworth

+0

Vale anche la pena sottolineare che rinominare le tabelle da 'user' a' _user' non è un cambiamento molto difficile da provare per un attaccante, specialmente dal momento che l'hacker è probabilmente un programma, non un umano. Ha senso quanto cambiare la password da 'password' a' passw0rd' e pensare "Nessun attaccante saprà!" –