Spring'in JdbcTemplate abstraction bir çok işlevsellik sağlar, ancak SQL enjeksiyon saldırılarına karşı koruma sağlayacak şekilde kullanılabilir mi? Örneğin, PreparedStatement'u doğru tanımlanmış bir parametrelendirmeyle kullanacağınız koruma türünde olduğu gibi.Spring JDBC, SQL enjeksiyon saldırılarına karşı koruma sağlıyor mu?
19
A
cevap
23
Kesinlikle öyle. o kuvvetle iyilik sizin için sahne arkasında kullanıyor olması gerekir ifadeleri (hazırlanan ,
String lastName = this.jdbcTemplate.queryForObject(
"select last_name from t_actor where id = ?",
String.class, 1212L);
Gördüğünüz gibi: Bu örnek (2. * aynı ama) Bahar 3,0 dokümanlardan düzdür): parametreleri yer tutucularla (?
) belirtin ve parametreleri doldurmak için bir dizi nesne sağlayın. (Son parametre beklenen sonucun türüdür, ancak bu soru için çok uygun değildir.)
Ayrıca NamedParameterJdbcTemplate
ve parametreleri Map
da sağlayabilirsiniz, bu da belki daha az verimli ancak kesinlikle daha az anımsatıcıdır.
Cool - ana şey, Spring'in API'sinde parametrelenmiş yöntemlerin kullanılması, korumanın korunacağı şekilde, Java PreparedStatements'da parametrelenmiş yöntemlerle kesinlikle eşleşmesidir. – Brabster
Yapmalılar; Spring, En İyi Uygulamaları daha uygun bir şekilde uygulamakla ve bir PreparedStatement kullanmakla ilgili olarak tavsiye edildi… iyi, JDBC ile karşılaştığım ilk sürümünde tavsiye edilmediğini hatırlıyorum. (Tüm JDBC sürücülerinin doğru olup olmadığını bilmiyorum, ama eğer bunu kullanmıyorsa, bunun için bir _excellent_ nedeni olduğunu düşünmüyordum.) –