Vulnerabilità di troncamento SQL

1

Sono venuto a conoscenza della vulnerabilità di troncamento SQL di cui non ero a conoscenza. Sono a conoscenza del fatto che questa vulnerabilità si basa sul fatto che MySQL tronca il valore di una "query di inserimento" se il valore supera la larghezza della colonna corrispondente. Il primo aspetto di questa vulnerabilità è CVE-2008-4106 che segnala il problema nel CMS WordPress. Il CVE segnala che il problema era relativo a un'implementazione di WordPress. Ma avrei detto che questo è un problema relativo all'implementazione MySQL che tronca l'input invece di generare un errore e bloccare la query.

Quindi la vulnerabilità del troncamento SQL è un problema nel DBMS (MySQL) o nell'applicazione web che non controlla la lunghezza della stringa?

Ho installato l'ultima versione di MySQL (5.5) per fare alcuni test e apparentemente se il valore inserito supera la larghezza della colonna, ricevo un errore:

Error: Data too long for column 'name' at row 1 

e la query non viene eseguita. Questo mi suggerisce che MySQL ora implementa un controllo migliore per la lunghezza dell'input e quindi l'applicazione web non dovrebbe essere responsabile di questo controllo. Cosa mi manca?

    
posta Federico 27.06.2014 - 15:21
fonte

1 risposta

1

Rispondo alla mia stessa domanda grazie a @SilverlightFox.

MySQL ha due modalità di funzionamento: STRICT_TRANS_TABLES e STRICT_ALL_TABLES e citando MySQL doc:

Strict mode controls how MySQL handles invalid or missing values in data-change statements such as INSERT or UPDATE. A value can be invalid for several reasons. For example, it might have the wrong data type for the column, or it might be out of range. A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition. (For a NULL column, NULL is inserted if the value is missing.)

Se le due modalità sono disabilitate, MySQL tronca automaticamente la stringa inserita nel caso in cui superi la lunghezza della colonna. Quindi il comportamento di MySQL è "legittimo" e il motivo per cui dovrei controllare la lunghezza dell'input nell'applicazione web è perché non dovrei fare affidamento sul fatto che MySQL ha STRICT_TRANS_TABLES e STRICT_ALL_TABLES abilitati.

    
risposta data 01.07.2014 - 14:12
fonte

Leggi altre domande sui tag