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?
risposta
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.
+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
Grazie per il chiarimento Andy (e la citazione apt). Non avevo pensato ai tavoli di sistema! – foiseworth
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à!" –
_this
, _
qui ha alcuna relazione con la sicurezza, con che può essere vulnerabile
buona lettura
+1 per collegare questa ottima risposta. – BernaMariano
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
Speriamo che condividerai questa pagina con lui. – MikeSmithDev
Paranoid Dev? Forse, forse no. Dev Incompetant? Molto probabilmente. – MatBailie