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

  • Blu animations and other videos

    Blu animatio

    15 HAZİRAN 2007
  • ShotgunSandwichENT

    ShotgunSandw

    3 EKİM 2012
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008