.NET

2011-06-17 8 views
6

में XPath/XML इंजेक्शन को कैसे रोकें। मैं .NET Framework में XPATH इंजेक्शन को कैसे रोक सकता हूं?.NET

हम पहले XPATH कथन बनाने के लिए स्ट्रिंग कॉन्सटेनेशन का उपयोग कर रहे थे, लेकिन पाया कि अंतिम उपयोगकर्ता कुछ मनमानी XPATH निष्पादित कर सकते हैं। उदाहरण के लिए:

string queryValue = "pages[@url='" + USER_INPUT_VALUE + "']"; 
node = doc.DocumentElement.SelectSingleNode(queryValue); 

इनपुट स्ट्रिंग से सिंगल और डबल कोट्स को अलग करने के लिए पर्याप्त होगा?

या, .NET फ्रेमवर्क समर्थन पैरामीटरकृत XPATH क्वेरी करता है?

उत्तर

8

एक XPath इंजेक्शन को रोकने में मुख्य विचार पूर्व संकलित करने के लिए XPath अभिव्यक्ति आप इसे में इस्तेमाल करते हैं और चर (पैरामीटर) की अनुमति देने के लिए, मूल्यांकन प्रक्रिया के दौरान उपयोगकर्ता के दर्ज किए गए मानों द्वारा प्रतिस्थापित किया जाएगा चाहते हैं।

नेट में:

  1. अपने XPath expresion XPathExpression.Compile() के साथ पहले से तैयार की है।

  2. उपयोग XPathExpression.SetContext() विधि संदर्भ के रूप में एक XsltContext उद्देश्य यह है कि उपयोगकर्ता के दर्ज किए गए मानों के लिए कुछ विशिष्ट चरों का समाधान करता है निर्दिष्ट करने के लिए।

आप कैसे एक XPath अभिव्यक्ति है कि चर here शामिल मूल्यांकन करने के लिए के बारे में अधिक पढ़ सकते हैं।

इस पाठ में अच्छे और पूर्ण उदाहरण हैं।

2

यदि आप एक पूर्ण उड़ा XsltTransform का उपयोग करते हैं तो मजबूत टाइप किए गए पैरामीटर उपलब्ध हैं।

+0

मेरे मामले में, मैं बस एक एक्सएमएल फ़ाइल में नोड खोजने की कोशिश कर रहा हूं। तो एक्सएसएलटी अधिक है। – frankadelic

+0

मजबूत टाइप किए गए पैरामीटर न केवल एक्सएसएलटी रूपांतरण का उपयोग कर रहे हैं - मेरा उत्तर देखें। –

0

दृढ़ता से टाइप किए गए पैरामीटर के बजाय आप उपयोगकर्ता के लिए विकल्प कम कर सकते हैं। अगर आप इसे नहीं चाहते हैं तो उन्हें पूर्ण नियंत्रण क्यों दें?

उपयोगकर्ता को चुनने के लिए दो विकल्प के साथ प्रदान करें और फिर क्वेरी बनाएं।

उपयोगकर्ता को किसी भी स्ट्रिंग में प्रवेश करने की अनुमति देने से परेशानी या बहुत काम मिल रहा है।

+0

आप जो सुझाव दे रहे हैं वह सैनिटाइजिंग इनपुट की तरह लगता है। क्या आप वर्णों का सेट प्रदान कर सकते हैं जिन्हें XPATH के लिए फ़िल्टर किया जाना चाहिए? – frankadelic

+0

@ फ्रैंकडेलिक: आपको "पात्रों का एक सेट" की आवश्यकता नहीं है। XPath इंजेक्शन से बचाने का तरीका एक पूर्व-संकलित XPath अभिव्यक्तियों का उपयोग करना है जिसमें चर शामिल हैं। प्रासंगिक .NET दस्तावेज़ों के स्पष्टीकरण और लिंक के लिए मेरा उत्तर देखें। –

+0

हां, यही मेरा मतलब था। स्ट्रिंग इनपुट की अनुमति न दें। कुछ विकल्प बटन दें और बक्से चेक करें और प्रश्नों को कड़ी मेहनत करें। –

1

पैरामीटरेटेड XPath संभव है यदि आप सैक्सन को अपने XPath प्रोसेसर के रूप में उपयोग करते हैं।

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

  • कोई संबंधित समस्या नहीं^_^