मैंने अभी ग्रहण के लिए FindBugs प्लगइन स्थापित किया है, उम्मीद है कि यह मुझे मेरे कोड में SQL इंजेक्शन भेद्यता खोजने में मदद करेगा।Findbugs संभावित SQL इंजेक्शन भेद्यता नहीं ढूंढ रहे
सार्वजनिक स्थिर अंतिम स्ट्रिंग staticFinalBaseQuery = "से foo का चयन करें: हालांकि, यह कुछ भी खोजने हो सकता है, यहां तक कि जब मैं जानबूझ कर में कुछ डाल दिया, मान staticFinalBaseQuery
घोषित किया जाता है इस प्रकार है प्रतीत नहीं होता
निम्नलिखित उदाहरण में। टेबल जहां आईडी = '";
और मान लें कि userInputfilterString
उदाहरण स्निपेट को लपेटने की विधि के लिए एक तर्क है। यह उपयोगकर्ता इनपुट से सीधे आता है, और sanitized नहीं है।
String query = staticFinalBaseQuery + userInputfilterString;
pstmt = dbConnection.prepareStatement(query);
कहाँ staticFinalBaseQuery
एक स्थिर अंतिम स्ट्रिंग है, और userInputfilterString
उपयोगकर्ता इनपुट से एक स्ट्रिंग प्रत्यक्ष, उपलब्ध केवल रनटाइम पर, सब पर झाड़ी नहीं है:
उदाहरण के लिए, निम्नलिखित स्निपेट एक चेतावनी ट्रिगर नहीं करेगा । जाहिर है, यह एक भेद्यता है।
मुझे उम्मीद है कि "A prepared statement is generated from a nonconstant String" चेतावनी को ट्रिगर किया जाएगा।
निम्नलिखित स्निपेट भी (के बाद से इनमें से संकलित रूपों शायद समान हैं, आश्चर्य की बात नहीं) एक चेतावनी का कारण नहीं है:
pstmt = dbConnection.prepareStatement(staticFinalBaseQuery + userInputfilterString + "'");
:
pstmt = dbConnection.prepareStatement(staticFinalBaseQuery + userInputfilterString);
बहरहाल, यह एक चेतावनी का कारण होगा अगर मैं खाली स्ट्रिंग या स्पेस जोड़ता हूं, तो कोई चेतावनी ट्रिगर नहीं होती है।
तो, मेरा प्रश्न है, मैं अपने पहले उदाहरण पर ट्रिगर करने के लिए FindBugs कैसे प्राप्त कर सकता हूं? मैं भी उत्सुक हूं क्यों पहला चेतावनी नहीं देता है, लेकिन आखिरी करता है?
अग्रिम धन्यवाद!
EDIT: Isubmitted a bug FindBugs की बग ट्रैकिंग सिस्टम में, जैसा कि ऐसा लगता है कि यह एक बग हो सकता है। हालांकि, अगर किसी के पास कोई सुझाव है, तो मुझे उन्हें सुनना अच्छा लगेगा।
शायद आपको इसे FindBugs लोगों को बग के रूप में रिपोर्ट करना चाहिए? –
हाँ, शायद मुझे चाहिए। मैंने सोचा कि शायद मैं इसे गलत इस्तेमाल कर रहा था। यदि ऐसा है, तो वे दस्तावेज़ीकरण को अपडेट करना चाहेंगे। – pkaeding
क्या आप पोस्ट कर सकते हैं कि वास्तव में staticFinalBaseQuery और userInputfilterString कैसे प्रारंभ किए गए हैं? –