एसक्यूएल इंजेक्शन जोखिम नहीं होना चाहिए जब आप हाइबरनेट का उपयोग कर रहे हों - जब तक आप इसे सही तरीके से उपयोग कर रहे हों।
हाइबरनेट प्रश्नों या तो HQL (हाइबरनेट के SQL जैसी क्वेरी भाषा) में लिखा या वस्तु उन्मुख मानदंड एपीआई का उपयोग कर कार्यान्वित किया जाता है।
HQL सबसे आम है और सबसे की सिफारिश की है। ,
Subscription sub = (Subscription) sessionFactory.getCurrentSession()
.createQuery("from Subscription sub where sub.verification = :verification")
.setString("verification", verification)
.uniqueResult();
इस फार्म आप एसक्यूएल इंजेक्शन से सुरक्षित हैं क्योंकि हाइबरनेट एक पैरामीटर के रूप में स्ट्रिंग से गुजरता है;: आमतौर पर आप इस प्रकार कोई HQL क्वेरी लिखते थे इसे एसक्यूएल के हिस्से के रूप में व्याख्या नहीं किया जा सकता है।
हालांकि आप बुरी तरह से एक लिखने इस तरह एक प्रश्न ...
Subscription sub = (Subscription) sessionFactory.getCurrentSession()
.createQuery("from Subscription sub where sub.verification = '" + verification + "'")
.uniqueResult();
... तो आप एसक्यूएल इंजेक्शन से संरक्षित नहीं कर रहे हैं व्यवहार करते हैं। हालांकि आपको इस तरह के प्रश्न कभी नहीं लिखना चाहिए! मुझे नहीं लगता कि अगर आप अपने प्रश्नों के तारों को जोड़ते हैं तो कोई ढांचा आपको सुरक्षित रखेगा।
अंत में, यदि आप हाइबरनेट मानदंड API का उपयोग करते हैं तो आप स्वचालित रूप से एसक्यूएल इंजेक्शन से सुरक्षित होते हैं; क्योंकि जब आप मानदंड एपीआई का उपयोग कर रहे हैं तो हाइबरनेट अंतर्निहित क्वेरी बनाता है, यह ऐसा करता है जो SQL इंजेक्शन को रोकता है।