2012-04-06 18 views
5

जैसा कि मैंने बहुत सारे लेखों में पढ़ा है, जब मैं जेपीए/हाइबरनेट क्वेरी का उपयोग करता हूं तो मेरे प्रश्नों में पैरामीटर सेट करना अच्छा होता है इसलिए एसक्यूएल इंजेक्शन से बचा जाता है। पसंद:जेपीए क्वेरी - स्थितित्मक पैरामीटर में एसक्यूएल इंजेक्शन जेपीए मूल प्रश्न

select user from User user where user.name = :name and user.surname = :surname 

मेरी समस्या यह है कि कुछ मामलों में मुझे अपनी क्वेरी बनाने पर मूल क्वेरी का उपयोग करने की आवश्यकता होती है।

मैं अपने इकाई प्रबंधक और createNativeQuery का उपयोग करूंगा। लेकिन इस मामले में पैरामीटर स्थितित्मक होंगे। जैसा:

select * from users where user_name = ? and user_surname = ? 

तब मेरे क्वेरी में मैं विधि setParameter(1, "name") आदि तो है इस मामले "एसक्यूएल इंजेक्शन सबूत" की तरह जब पैरामिट्रीकृत क्वेरी में उपयोग करेंगे?

+1

हां, सेट पैरामीटर विधि का उपयोग करते समय यह पैरामीटर से सही ढंग से बच जाएगा ताकि इसे केवल डेटा के रूप में उपयोग किया जा सके। इंजेक्शन भेद्यता उत्पन्न होती है जब उपयोगकर्ता आपूर्ति किए गए पैरामीटर का उपयोग करके स्ट्रिंग का निर्माण होता है और ठीक से बच नहीं जाता है। – kevingallagher

उत्तर

4

अगर आप

की तरह आपकी क्वेरी के निर्माण के लिए स्ट्रिंग आपरेशन का उपयोग नहीं करते पर इनपुट, चारसेट उम्मीदों, संग्रहित प्रक्रियाओं और सख्त आवश्यकताओं को छानने के संयोजन का उपयोग
"SELECT foo FROM bar Where id="+myParameter+" more sql ..." 

, तो आपके पास कोई भेद्यता नहीं होगी।

1

वर्तमान में (यदि मैं गलत हूं तो समुदाय मुझे सही करता है) नवीनतम पीडीओ डेटाबेस अबास्ट्रक्शन परत के भीतर कोई भेद्यता मौजूद नहीं है।

हालांकि, स्वच्छता और फ़िल्टरिंग इनपुट के दौरान ज्ञात और अज्ञात के लिए आपके प्रश्नों का परीक्षण करने से शून्य दिन के शोषण की स्थिति में इंजेक्शन की संभावना को खत्म करने में मदद मिलेगी।

मैं वर्तमान में अपने तर्क और किसी भी करने से पहले सभी डायनामिक रूप से तैयार प्रश्नों