Possibile vulnerabilità di SQL injection?

4

Sono uno sviluppatore e sto creando uno script per interfacciarlo con i server di gioco per aggiornare le statistiche dei giocatori. Stavo inviando una richiesta POST con dati di moduli multipart e sull'ultimo confine c'era il confine sbagliato.

Content-Type: multipart/form-data; boundary=--------484554302

Ma a un personaggio mancava ----------48455430-- che ha attivato questa risposta dal server:

MySQL error 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\r\n----------48455430-- = '' WHERE id = '463413'' at line 1)

Non so molto di SQL ma questa sembra una potenziale vulnerabilità. Qualche consiglio?

    
posta Edward Severinsen 12.06.2018 - 12:11
fonte

1 risposta

4

Sembra che tu stia passando a qualsiasi cosa si supponga essere nella serie di dati preceduta a MySQL senza codifica appropriata o l'uso di istruzioni preparate. Di conseguenza, MySQL interpreta il limite come codice SQL e genera un errore che non è SQL valido.

Per lo meno, è necessario codificare tutti i dati che sono inclusi nelle query SQL. Meglio ancora, imponi i dati a un tipo specifico - se ti aspetti un intero, assicurati che solo gli interi siano autorizzati a passare, rifiutando tutto ciò che non è un intero prima che colpisca il database. Ancora meglio, fallo e usa istruzioni preparate.

Le istruzioni preparate impongono la separazione tra SQL eseguibile e dati che si stanno utilizzando all'interno di SQL, quindi, anche se i dati imprevisti lo superano, il database non lo tratterà come parte dell'istruzione SQL, ma tenterà invece di utilizzarlo come dati. Sono disponibili per i linguaggi Web più comunemente utilizzati con i database più comuni. Non sono perfetti (vedi Le dichiarazioni preparate sono sicure al 100% contro SQL injection? ) ma sono molto meglio che includere dati grezzi.

    
risposta data 12.06.2018 - 12:32
fonte

Leggi altre domande sui tag