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

  • ASUS Campus Life

    ASUS Campus

    18 Mart 2013
  • pjtoohot

    pjtoohot

    15 NİSAN 2008
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010