2011-01-27 11 views
16

में बंद कर दिया जाता है तो मैं रूबी भाषा नफरत है क्योंकि यह स्थिर नहीं लिखा है, लेकिन और अधिक समय मैं वसंत के साथ समय बिताने/हाइबरनेट मैं रेल सुविधाओं पर रूबी के और अधिक की सराहना करते हैं। विशेष रूप से तथ्य यह है कि उनके सक्रिय रिकॉर्ड मॉडल आपके लिए एसक्यूएल इंजेक्शन रोकता है। यह मुद्दा आमतौर पर स्प्रिंग/हाइबरनेट स्टैक के साथ कैसे संभाला जाता है? क्या कोई उपयोगकर्ता किसी भी प्रकार की स्क्रबिंग टूलकिट के साथ आता है, यह सुनिश्चित करने के लिए कि आपका उपयोगकर्ता इनपुट सुरक्षित है?कैसे एसक्यूएल इंजेक्शन आम तौर पर एक स्प्रिंग/हाइबरनेट सेटअप

यह एक डालने अगर आप सिर्फ डीएओ के डालने कर रहे हैं पर एक मुद्दे के ज्यादा नहीं है, लेकिन यह एक बड़ा मुद्दा है जब बयान का चयन का उपयोग कर।

उत्तर

30

एसक्यूएल इंजेक्शन जोखिम नहीं होना चाहिए जब आप हाइबरनेट का उपयोग कर रहे हों - जब तक आप इसे सही तरीके से उपयोग कर रहे हों।

हाइबरनेट प्रश्नों या तो 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 इंजेक्शन को रोकता है।

1

मुझे लगता है कि आप अपने खुद के प्रश्न का उत्तर दिया - अगर आप एक अंतिम उपाय है, तो उस शायद संभावित हमले अंक का 95% समाप्त कटौती के रूप में HQL का उपयोग कर रहे। और, क्योंकि आप केवल उन मुश्किल बढ़त मामलों में यह प्रयोग कर रहे हैं आप आप वास्तव में क्या कर रहे हैं के लिए और अधिक ध्यान दे होने की संभावना हो।

संबंधित मुद्दे