2011-01-05 16 views
10

Veritabanımla etkileşimde bulunmak için hazırda bekledim, şimdi veritabanı katmanımı SQL Injection'a karşı güvenli hale getirmek istedim, bu yüzden bazı araştırmalar yaptım ve sorgularımın parametrelendirilmesi gerektiğini öğrendim. sadece benim HQL sorguları yapısı eğer demek: Hazırda Hazırda SQL Injection'a karşı koruma

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?") 
.setString(0, name) 
.list(); 

Sonra parametreli ve SQL Enjeksiyon korunmaktadır, ya yapmam gereken başka bir şey var

...

bir başka şey bahsedildi - "Daima Verilerinizden Kaçışın "Bu nasıl başarılabilir?

cevap

4

setString() hakkında bilmiyorum, ancak setParameter() ile aynıysa, evet, sql enjeksiyonunu önlemek için bunu yapmak yeterlidir.

Güncelleme verilerini kaçan By

, size veritabanında tehlikeli değerleri depolamak olmadığından emin olmak zorunda olduğu anlamına gelir. Eğer argüman sonra bir dahaki sefere veritabanından bu yük ve web tarayıcısında işlemek sorgunuzla

String name = "<script>alert('Hello');</script>"; 
//insert this name into Mother, and then when you load it from the database, it will be displayed  

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?") 
.setString(0, name) 
.list(); 

, bu komut dosyasını çalıştırmak olacaktır geçmek durumunda

Hızlı bir örnek mesela olduğunu .
Çerçevenizin tüm yasa dışı karakterlerden kaçtığından emin olmalısınız, örneğin: veritabanına eklemeden önce < değerini &lt; olarak değiştirin.
Çerçeveniz bunu yapmıyorsa, el ile yapmanız gerekir. Orada sizin için kod kaçar kitaplık tonlarca vardır. Örneğin this question'a bir göz atın ve oradaki cevaplar.

+0

Teklif ettiğin bağlantıya baktım .. insanlar kaçan html çözümleri önerdiler .. İstenilen başka bir kaçma var mı? –

+3

-1. Giriş verilerinden kaçmak XSS'nin önlenmesine iyi bir yaklaşım değildir. Daha iyi bir yol, bu bağlamın kurallarını dikkate alarak, tehlikeli içerik (HTML sayfası gibi) ekleyeceğiniz zaman güvenilmeyen verileri kaçırmaktır. Ayrıca bkz. [OWASP XSS Önleme Hile Sayfası] (http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet). Ayrıca soru XSS hakkında değil, SQL enjeksiyon hakkındaydı. – axtavt

+0

@axtavt Cevabımı okudum ve kod içinde yorum yaparsanız göreceğinize değindim veriler annemin masanın üzerine yerleştirilmesinden sonra çıkarılmalı. –