2010-03-25 17 views
7

सादा-वेनिला एनएचबेर्नेट सेटअप, उदाहरण के लिए, कोई धाराप्रवाह NHibernate, कोई HQL नहीं, डोमेन ऑब्जेक्ट्स और NHibernate मैपिंग फ़ाइलों को छोड़कर कुछ भी नहीं।सादा इंजेक्शन सादा-वेनिला एनएचबेर्नेट

myLightSaber.NameTag = "Raw malicious text from user"; 

मैं तो लाईटसबेर बचाने:

_lightSabers = session.CreateCriteria(typeof(LightSaber)).List<LightSaber>(); 

मैं "लेजर" वर्ग पर एक संपत्ति के लिए सीधे कच्चे उपयोगकर्ता इनपुट लागू होते हैं: मैं के माध्यम से वस्तुओं लोड

session.SaveOrUpdate(myLightSaber); 

सब कुछ मैं मैंने देखा है कि हां, इस स्थिति के तहत आप एसक्यूएल इंजेक्शन से प्रतिरक्षा हैं, क्योंकि एनएचबीर्नेट पैरामीटर को हाइलाइट करता है और हुड के नीचे पूछताछ से बच निकलता है। हालांकि, मैं एक रिश्तेदार एनएचबेर्नेट शुरुआत भी कर रहा हूं इसलिए मैं दोबारा जांचना चाहता था।

धन्यवाद!

+0

मुझे अंत में * बल सुझाव * भाग को समझ में नहीं आता है। क्या यह मजाक होना चाहिए? मुझे यह नहीं मिला। –

+0

हाँ- क्षमा करें। क्यू के एक अलग संस्करण से टाइपो हटा दिया गया। –

उत्तर

8

हां, आप NHibernate का उपयोग करते समय एसक्यूएल इंजेक्शन के प्रति लगभग प्रतिरक्षा हैं। यह उन सभी प्लेटफार्मों पर सभी जेनरेट किए गए SQL कथनों के लिए पैरामीटरयुक्त क्वेरी का उपयोग करता है जो इनका समर्थन करते हैं।

हालांकि, आप सम्मिलन/अपडेट के लिए कस्टम एसक्यूएल का उपयोग करके या एसक्यूएल को किसी प्रकार के execute_sql, या पैरामीटर के बिना एसक्यूएल क्वेरीज़ के साथ निष्पादित करके इसे बाधित कर सकते हैं।

3

जब तक आप उपयोगकर्ता इनपुट सीधे एचक्यूएल या एसक्यूएल में प्लग नहीं करते हैं तब तक आप सुरक्षित हैं: कुछ भी नहीं (कार्यक्षमता हाइबरनेट प्रदान करता है) उपयोगकर्ताओं को दुर्भावनापूर्ण कोड इंजेक्ट करने की अनुमति देगा।

2

बस दूसरों को गूंजने के लिए, यदि आप एनएचबीर्नेट को अपना एसक्यूएल जेनरेट करते हैं तो आप कम से कम सिद्धांत में सुरक्षित हैं।

हालांकि, आपको अभी भी डेटाबेस में संग्रहित प्रक्रियाओं, ट्रिगर्स और कार्यों के साथ सावधान रहना होगा, विशेष रूप से गतिशील एसक्यूएल के साथ। भले ही ग्राहक हर जगह parametrized प्रश्नों का उपयोग करता है, इंजेक्शन अभी भी संभव हो सकता है।

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