SORU
28 Kasım 2009, CUMARTESİ


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
28 Kasım 2009, CUMARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Felice Musique

    Felice Musiq

    22 NİSAN 2014
  • Kat Krazy

    Kat Krazy

    12 Kasım 2010
  • TechXCentral

    TechXCentral

    12 Temmuz 2011