2011-12-12 16 views
8

Spring MVC'nin SQL enjeksiyonlarını (ve diğer güvenlik sorunlarını: XSS, kod [javascript] enjeksiyonu, vb.) Nasıl işlediğini merak ediyorum. Çoğunlukla DB'lere ve buna eklenen değerlerden kaçmaktan bahsediyorum. Ben herhangi bir cevap bulmak için görünmüyor çünkü her zaman ben bahar sql enjeksiyon sonuçları için bağımlılık enjeksiyon içeren ortaya çıkmaktadır.Yay (MVC) SQL enjeksiyonundan kaçınma mı?

Akışım şu şekildedir: İstemci tarayıcısından bazı sorgu parametreleri içeren bir JSON'dan (JS'de SQL sorgusunu oluşturmak için çok aptalca olan değil) oluşan bir istek yapıyorum. İstek, Denetleyicide düzgün bir şekilde açıklanmış yönteme ulaştığında, istek, "istek nesnesine" Jackson kullanarak @RequestBody ile eşleştirilir. Şimdi bu nesne, JDBC Şablonunu kullanarak db'yi (ve RowMapper kullanarak sonuçları eşlemek) kullanarak DAO'ya gönderilir.

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; 
} 

Şimdi SQL enjeksiyonu güvenli bu yaklaşımdır: DAO

ben gibi bir şey var mı? Spring MVC'den akan JDBCTemplate tabanlı olmayan sorgular güvenli midir?

Bu konuda biraz tartışabilir miyiz? örneğin

jdbcTemplate.queryForInt(sql, args, argTypes) 

:

cevap

15

Herzaman doğru bir şekilde parametreleri geçmesi Eğer enjeksiyon saldırıları

için vunerlable olan sıralanmasıyla bir sorgu oluşturmak

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

Evet aslında bu benim için biraz açıktır . Soru şu ki ... ... yukarıda anlattığım gibi Spring birşeyden kaçar mı, değil mi? Şimdi, geri dönmeyi düşünüyorum, sanırım değil, sadece sormayı tercih ederim. – BogdanSorlea

+2

Yine de onu uyguladınız. Bahar hiçbir şeyden kaçmayacak. Yukarıdaki verdiğiniz bilgilere dayanarak tek sorununuz. – Mick

+1

Ve bu soru sadece bahar ya da java ile ilgili değil. Bu cevabı tamamen kabul et. – Mukus

İlgili konular