Le stored procedure impediscono l'SQL Injection in PostgreSQL?

19

È vero che le stored procedure impediranno l'iniezione di database? Ho fatto una piccola ricerca e ho scoperto che SQL-Server, Oracle e MySQL non sono sicuri contro le iniezioni SQL se usiamo solo stored procedure. Tuttavia, questo problema non esiste in PostgreSQL. L'implementazione della stored procedure nel core di PostgreSQL lo impedisce dall'iniezione SQL o ci sono altri motivi / differenze? Posso usare SQL injection in PostgreSQL se usiamo solo stored procedure?

    
posta Am1rr3zA 19.11.2010 - 23:44
fonte

4 risposte

11

In breve: no, le stored procedure non impediscono da SQL Injection. Dipende da come gestisci l'SQL dinamico all'interno della stored procedure.

Per una risposta più completa, controlla cosa viene pubblicato qui: link

    
risposta data 19.11.2010 - 23:58
fonte
6

Controlla questi link e l'immagine diventerà più chiara:

link

link

"... Misure per evitare l'iniezione SQL

  1. Convalida tutti gli input provenienti dall'utente sul server.
  2. Evita l'uso di query SQL dinamiche se è disponibile un metodo alternativo.
  3. Utilizzare la stored procedure con parametri con parametri incorporati.
  4. Esegui le stored procedure utilizzando un'interfaccia sicura come le dichiarazioni Callable in JDBC o CommandObject in ADO.
  5. Utilizzare un account con privilegi minimi per eseguire il database.
  6. Assegna i ruoli e i privilegi appropriati alla stored procedure utilizzata nelle applicazioni. "
risposta data 21.11.2010 - 04:31
fonte
5

SE usi SP in modo corretto, quindi sei praticamente al sicuro da SQL Injection (ammesso che tu continui comunque a convalidare correttamente gli input, ovviamente). se .

Ah, ma cosa vuol dire usare SP in modo corretto?

Due dei più comuni usi errati di SP che vedo spesso e che possono portare a SQL Injection anche con stored procedure sono:

  • SQL dinamico all'interno dell'SP.
  • Chiamare l'SP dal codice come si eseguirà una stringa concatenata. Cioè semplicemente inviando al database "exec spname (param1)", invece di usare oggetti comando / parametro (o parametrizzare la query, a seconda della lingua). SQLi può ancora essere iniettato nella chiamata SP ...
risposta data 21.11.2010 - 01:40
fonte
4

È necessario il binding variabile insieme ai parametri denominati, indipendentemente dal fatto che la query sia o meno una stored procedure. Inoltre devi preoccuparti di alcune istruzioni SQL come: LIKE

    
risposta data 20.11.2010 - 02:44
fonte

Leggi altre domande sui tag