ArÅŸiv

Buna etikete sahip yazılar; ‘sqlRestriction sql injection’

Hibernate Criteria API – Restrictions.sqlRestriction metodu

Cumartesi, 01 Mar 2014 Yorum yapılmamış

Hibernate Criteria API’de hazırlanmakta olan sql’e “native sql” ekleyebilmemizi saÄŸlayan özel bir metot bulunuyor; Restrictions.sqlRestriction(). Özellikle veritabanı fonksiyonlarından faydalanmak istediÄŸimizde veyahut da düz sql ile daha kolay halledebileceÄŸimizi düşündüğümüz durumlarda kullanışlıdır da.

Fakat bu metodun tek parametre alan hali sorunlara yol açabilir. EÄŸer kullanıcı tarafından(ekrandan, dosyadan vs.) girilen deÄŸer bu sql ifadesine doÄŸrudan parametre olarak ekleniyorsa muhtemel bir “sql injection” veya yapısı bozulan bir sorgu(missing right/left parenthesis, invalid character vs.) ile karşılabilirsiniz.

Bu durumlardan sakınmak için metodun parametrelerinin tipini de belirtebildiğimiz versiyonunu kullanmak gerek.

//...
Criterion criterion = Restrictions.sqlRestriction("NLS_LOWER(USER_NAME, 'nls_sort = XTurkish') like  '" + userName + "'");
//...

ÅŸeklinde parametreyi sql ifadesine doÄŸrudan eklemek yerine

//...
//Tek parametre olmasi durumundaki kullanim
Criterion critCode = Restrictions.sqlRestriction("NLS_LOWER(USER_NAME, 'nls_sort = XTurkish') like ? ", userName, StandardBasicTypes.STRING);
//...
//Birden fazla parametre olmasi durumundaki kullanim
Object[] parameterValues = new Object[]{userName, userSurname};
Type[] parameterTypes = new Type[]{StringType.INSTANCE, StringType.INSTANCE};
criteria.add(Restrictions.sqlRestriction("NLS_LOWER(USER_NAME, 'nls_sort = XTurkish') like ? or NLS_LOWER(USER_SURNAME, 'nls_sort = XTurkish') like ? ", parameterValues, parameterTypes));
//...

şeklindeki kullanım daha doğru olur.

FacebooktwitterlinkedinmailFacebooktwitterlinkedinmail