Java - string SQL enjeksiyon önlemek için kaçış
Bazı anti java yerde sql enjeksiyon ve çok zor "replaceAll" dize işlevini. iş bulma yaşıyorum koymaya çalışıyorum Sonuçta ihtiyacım olan bir işlevi olacak dönüştürmek varolan \
\\
"
\"
'
\'
\n
\\n
böylece dize kullanılarak değerlendirilmiştir MySQL SQL enjeksiyon engellenir.
İşlevi ve tüm \\\\\\\\\\\
ile çalışıyordum bazı kod gözlerim deli yapıyoruz çaldı. Eğer herkes bunun bir örneği var olursa çok minnettar olurum.
CEVAP
PreparedStatements SQL enjeksiyon imkansız çünkü gitmek için bir yoldur. Burada basit bir örnek, parametre olarak kullanıcının giriş alma:
public insertUser(String name, String email) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = setupTheDatabaseConnectionSomehow();
stmt = conn.prepareStatement("INSERT INTO person (name, email) values (?, ?)");
stmt.setString(1, name);
stmt.setString(2, email);
stmt.executeUpdate();
}
finally {
try {
if (stmt != null) { stmt.close(); }
}
catch (Exception e) {
// log this error
}
try {
if (conn != null) { conn.close(); }
}
catch (Exception e) {
// log this error
}
}
}
İsim ve e-posta ne olursa olsun, bu karakterleri doğrudan veritabanında yer alacak. Herhangi bir şekilde INSERT deyimi etkisi olmaz.
Kullandığınız bir veritabanı alanları ne bağlı olarak farklı veri türleri için farklı yöntemleri vardır. Eğer veritabanında bir TAMSAYI sütun varsa, örneğin,, setInt
bir yöntem kullanmalısınız. The PreparedStatement documentation farklı yöntem ve veri ayar listelenmiştir.
Nasıl JSP dosyaları Java kod önlemek i...
PDO hazırlanmış deyimleri SQL enjeksiy...
Nasıl java kullanmak için.String.Scala...
Nasıl Bağımlılık yapıcı Enjeksiyon del...
Nasıl bir veya CXF JAX-WS WSDL konumun...