No. Potresti confondere l'iniezione SQL con l'iniezione di dati; le tabelle di sola lettura non impediscono l'iniezione SQL e al massimo fanno solo un piccolo sforzo per limitare il suo impatto.
Iniezione SQL significa semplicemente la capacità di iniettare codice SQL. Mentre le tabelle di sola lettura possono limitare la possibilità di iniettare dati nella tabella, non incidono sulla possibilità di:
- Leggi da altri database o tabelle se non consentito
- Leggi dalle tabelle di sistema o esegui altre query di sistema che sono difficili da disabilitare
- Scrivi query eccessivamente complesse che eseguiranno un DoS
- Esamina i dati utilizzando DNS
- Accedi ai file locali (ad esempio, utl_file in Oracle)
- Accedere alla rete del server DB (ad es. utl_http in Oracle)
- Esegui codice arbitrario sul server tramite funzione DB buffer overflow
- Vedi Iniezione SQL avanzata nei database Oracle per una buona passeggiata attraverso tutti i tipi di cose di cui devi preoccuparti (e realizzare che altri database hanno i loro equivalenti)
Se tu
basically just want to tack what they enter onto the select
statement.
quindi autorizzi espressamente l'aggressore a provare uno di questi.
Ora puoi certamente fare cose per limitarlo. È possibile disabilitare le virgolette e i caratteri separatori delle istruzioni SQL. Puoi disabilitare qualsiasi input che non sia [A-Za-z0-9"=]
(o equivalente efficace per il tuo database). Ma se inizi a seguire questo percorso, stai meglio scrivendo la tua applicazione correttamente : esponi un'interfaccia di query più ricca in cui offri le chiavi da controllare e poi esegui il corretto quoting su qualunque valore l'utente entra.