पृष्ठभूमि:से बचने के लिए एसक्यूएल स्ट्रिंग्स जावा में
मैं वर्तमान में एक एंटरप्राइज़ सीएमएस डेटाबेस (व्यापार वस्तुओं) के लिए एक जावा सामने के छोर को विकसित कर रहा हूँ। फिलहाल, मैं एक सुविधा का निर्माण कर रहा हूं ताकि उपयोगकर्ता को कस्टम डेटाबेस क्वेरी बनाने की अनुमति मिल सके। मैंने यह सुनिश्चित करने के लिए पहले से ही उपायों को कार्यान्वित कर दिया है कि उपयोगकर्ता केवल उपलब्ध कॉलम और ऑपरेटरों के उप-समूह का उपयोग कर चुनने में सक्षम है जिसे उपयोगकर्ता पहुंच के लिए अनुमोदित किया गया है (उदाहरण के लिए SI_EMAIL_ADDRESS का चयन किया जा सकता है जबकि SI_CUID जैसे अधिक शक्तिशाली फ़ील्ड नहीं हो सकते हैं)। अभी तक चीजें तैराकी पर चल रही हैं, लेकिन अब संभावित एसक्यूएल इंजेक्शन हमलों के खिलाफ इस सुविधा को सुरक्षित करने का समय है।
प्रश्न:
मैं उपयोगकर्ता इनपुट तार से बचने के लिए एक विधि के लिए देख रहा हूँ। मैंने पहले से ही पेपरडेस्टेटमेंट देखा है, हालांकि मुझे डेटाबेस तक पहुंचने के लिए तीसरे पक्ष के एपीआई का उपयोग करने के लिए मजबूर होना पड़ता है। ये एपीआई मेरे लिए अपरिवर्तनीय हैं और सीधे डेटाबेस पहुंच प्रश्न से बाहर है। अलग-अलग विधियां चलने वाले प्रश्नों का प्रतिनिधित्व करने वाले तारों को लेती हैं, इस प्रकार प्रीपेडस्टेटमेंट को अमान्य कर दिया जाता है (जो, मेरे ज्ञान के लिए, सीधे डेटाबेस कनेक्शन के विरुद्ध चलाना चाहिए)।
मैंने String.replace() का उपयोग करने पर विचार किया है, लेकिन यदि संभव हो तो मैं पहिया को फिर से शुरू नहीं करना चाहता हूं। इसके अलावा, मैं सुरक्षा विशेषज्ञों से बहुत रोना हूं जो पेपरडेस्टेटमेंट विकसित करते हैं।
मैंने कुछ प्रकार की toString() विधि खोजने की उम्मीद करते हुए, पेपरडेस्टेटमेंट के लिए जावा एपीआई संदर्भ को भी देखा था। हां, मैं इस तरह के कुछ भी खोजने में असमर्थ रहा हूं।
किसी भी मदद की बहुत सराहना की जाती है। पहले ही, आपका बहुत धन्यवाद।
संदर्भ:
Java - escape string to prevent SQL injection
Java equivalent for PHP's mysql_real_escape_string()
तुम्हारा की पहली कड़ी पराक्रमी दिलचस्प है कि: यहाँ मेरी नमूना कोड है। मैं अंतर्निहित रूप से परिभाषित स्ट्रिंग() विधि के संभावित अपरिभाषित व्यवहार से चिंतित हूं। एंटरप्राइज़ आर्किटेक्ट्स ने यह सुनिश्चित करने के लिए प्रभावशाली प्रयास किए हैं कि डेटाबेस स्वयं छिपा हुआ है (जैसा कि उन्हें चाहिए)। मुझे यह भी नहीं पता कि डीबीएमएस क्या चल रहा है या भविष्य में इसे बदल दिया जाएगा। – phobos51594
वास्तव में, इसके बारे में सोचने के लिए आओ, यह तैयार किए गए स्तर की तरह दिखता नहीं है यहां तक कि सार्वजनिक रूप से सुलभ कन्स्ट्रक्टर भी है। चूंकि मेरे पास जेडीबीसी कनेक्शन ऑब्जेक्ट नहीं है, इसलिए मुझे यकीन नहीं है कि मैं कैसे तैयार किए गए स्टेमेंट ऑब्जेक्ट को शुरू करने के लिए भी प्राप्त कर सकता हूं। हम्म। – phobos51594
हाँ, मैं देख सकता हूं कि यह कैसे एक कन्डर्रम होगा। मैंने Log4JDBC का उपयोग नहीं किया है, लेकिन ऐसा लगता है कि यह तैयार कथन के आधार पर आपके लिए SQL उत्पन्न करने में सक्षम हो सकता है। – ametren