2011-12-12 17 views
8

Mi chiedo come Spring MVC gestisce iniezioni SQL (e altre questioni di sicurezza: XSS, codice [javascript] iniezione, ecc). Sto parlando principalmente di sfuggire i valori che vengono aggiunti a DB e così via. Non riesco a trovare alcuna risposta perché ogni volta che cerco i risultati di iniezione di primavera sql che comportano l'iniezione di dipendenza sorgono.Spring (MVC) Evita l'iniezione di SQL?

Il mio flusso è il seguente: dal browser del client faccio una richiesta composta da un JSON con alcuni parametri di query (non l'istruzione SQL, che sarebbe troppo stupida - per formare la query SQL in JS). Quando la richiesta raggiunge il metodo correttamente annotato nel controller, la richiesta viene mappata tramite @RequestBody con Jackson a un "oggetto di richiesta". Ora, questo oggetto viene inviato al DAO, in cui utilizzando JDBC Template interrogo il db (e usando RowMapper traccio i risultati).

Nel DAO ho qualcosa di simile:

public int countAll(RequestObject request) { 
    String sql = "SELECT count(*) FROM employees WHERE name = '" + request.getName() + "'"; 

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 
    int count = jdbcTemplate.queryForInt(sql); 

    return count; 
} 

Ora è al sicuro da SQL injection questo approccio? non sono JDBCTemplate -based query date È più sicuro che fluisce attraverso Spring MVC?

Possiamo avere un po 'di discussione su questo?

risposta

15

Ogni volta che si crea una query da concatenazione siete vunerlable ad attacchi di iniezione

passare i parametri in modo corretto:

jdbcTemplate.queryForInt(sql, args, argTypes) 

ad esempio:

 JdbcTemplate insert = new JdbcTemplate(dataSource); 
    insert.update("INSERT INTO PERSON (FIRSTNAME, LASTNAME) VALUES(?,?)", 
      new Object[] { firstName, lastName }); 
+0

Sì, in realtà questo è un po 'ovvio per me . La domanda è ... in casi come quello che ho spiegato sopra, Spring sfugge a qualcosa o no? Ora, ripensandoci, penso che non sia così, ma solo per essere sicuro che preferirei chiedere. – BogdanSorlea

+2

Eppure non l'hai implementato. La primavera non sfuggirà a nulla. Sulla base delle informazioni che hai dato sopra è il tuo unico problema. – Mick

+1

E questa domanda non solo si riferisce alla primavera o Java. Accetta totalmente questa risposta. – Mukus