16 Ağustos 2014 Cumartesi

GÜVENLİ KOD GELİŞTİRME-1 ERROR MESAJLARININ İŞLENMESİ

TANIM


Uygulama esnasında oluşacak hatanın detayları(yığın bilgisi) mutlaka gizlenmelidir. Bir veri sızıntısı güvenlik(data leaking) çeşididir. Sisteme hakim bir uzak kullanıcının sisteme müdahale etme ihtimali artmaktadır.

SENARYO -1- KÖTÜ DURUM 

Örnek kod bloğunda bir click event sonrasında bir veri tabanı bağlantısı gerçekleştirilmektedir.

public SQLContainer getMaleCustomer()
    {
        try
        {
            connectionPool = new SimpleJDBCConnectionPool(DRIVER_NAME,
                    DATABASE_URL, DATABASE_USERNAME, DATABASE_PWD);
            String query = "select * from t_customer where gender='Male'";
            prepareConnection();
            FreeformQuery freequery = new FreeformQuery(query, connectionPool,
                    "id");
            sqlContainer = new SQLContainer(freequery);
            connection.close();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
       
        return sqlContainer;
       
    }
Veri tabanı bağlantısı gerçekleştiren modüllerden birine baktığımız vakit try-catch kullanılmış ve e.printStackTrace() metodu kullanılarak hata catch edilmiştir.

TESPİT 

catch bloğuna printStackTrace() metodu kullanıldığı için exception mesajları olduğu gibi kullanıcı arayüz tarafına yansayacaktır(Şekil 1).

Şekil.1 Catch bloğunda data leaking



 ÇÖZÜM

public SQLContainer getMaleCustomer()
    {
        try
        {
            connectionPool = new SimpleJDBCConnectionPool(DRIVER_NAME,
                    DATABASE_URL, DATABASE_USERNAME, DATABASE_PWD);
            String query = "select * from t_customer where gender='Male'";
            prepareConnection();
            FreeformQuery freequery = new FreeformQuery(query, connectionPool,
                    "id");
            sqlContainer = new SQLContainer(freequery);
            connection.close();
        }
        catch (SQLException e)
        {
           
            Notification.show("Hata oluştu",
                    Type.HUMANIZED_MESSAGE);
            StringWriter sw = new StringWriter();
            e.printStackTrace(new PrintWriter(sw));
            System.err.println(sw.toString());
           
        }
       
        return sqlContainer;
      
  }

Yukarıdaki kod bloğunda Senaryo -1- deki kod örneğine göre catch bloğuna kullanıcıya “Hata oluştu” gerekçesinde bir hata mesajı verilmiştir. Bunun yanında Senaryo-1- deki hata stack kısmı konsol tarafına StringWriter ve PrintWriter nesneleri kullanılarak yazılmıştır.Bu loglar log4j gibi 3.parti eklentilerle daha işlevsel, okunabilir hale getirilebilir.

Şekil.2 Doğru bir hata yönetimi



REFERANSLAR VE DETAYLI BİLGİ İÇİN





Hiç yorum yok:

Yorum Gönder