मेरे पास इनपुट फ़ील्ड मान है जिसका उपयोग XPath क्वेरी बनाने के लिए किया जाता है। एक्सएमएल इंजेक्शन की संभावना को कम करने के लिए इनपुट स्ट्रिंग में कौन से प्रतीकों को जांचना चाहिए?एक्सएमएल इंजेक्शन से बचने के लिए कैसे करें
उत्तर
मैं आपके विशेष उपयोग के मामले में वैध इनपुट के बारे में विचार करने के साथ शुरू करूंगा, फिर बाकी सब कुछ प्रतिबंधित करने के तरीकों को देखें। यदि आपके पास प्रवेश मानों की एक निश्चित सीमा है, तो मैं केवल उन मानों में प्रवेश सीमित कर दूंगा। अन्यथा, यदि आपके उपयोग के मामले में आपको भविष्य को ध्यान में रखना आवश्यक है, तो आप शायद अक्ष मॉडिफायर और पथ विभाजक जैसे :
और \
की जांच करना चाहेंगे।
यह निर्भर करता है कि आप 'एक्सएमएल इंजेक्शन' से क्या मतलब रखते हैं। क्या दस्तावेज़ के कुछ भाग संवेदनशील हैं और उपयोगकर्ता को देखने की अनुमति नहीं दी जा सकती है? या आप इसे एक लिखने योग्य राज्य के रूप में खोल रहे हैं और उपयोगकर्ता को दस्तावेज़ के हिस्सों को अपडेट करने की इजाजत दे रहे हैं, और उन्हें केवल कुछ हिस्सों को अपडेट करने की अनुमति दी जानी चाहिए?
एक बुनियादी स्तर पर आपके सवाल का आप xpath अक्ष ऑपरेशन (उदा //
, /
, ::
) और एक न्यूनतम के रूप में वाइल्डकार्ड (@*
, *
) के लिए देखने की जरूरत है जवाब देने के लिए। लेकिन मेरी भावना यह है कि सीधे xpath बनाने के लिए उपयोगकर्ता इनपुट का उपयोग करना इष्टतम समाधान नहीं हो सकता है। हो सकता है कि यदि आप हमें प्राप्त करने की कोशिश कर रहे हैं, तो हम आपको अधिक संदर्भ देते हैं, हम वैकल्पिक दृष्टिकोण सुझा सकते हैं?
यह document विस्तार से "अंधेरे XPath इंजेक्शन" की अवधारणा का वर्णन करता है।
यह XPath इंजेक्शन के ठोस उदाहरण प्रदान करता है और इस तरह को रोकने के तरीकों पर चर्चा करता है।
अनुभाग "XPath इंजेक्शन के खिलाफ बचाव" में यह कहा गया है:
"XPath इंजेक्शन के खिलाफ बचाव करते अनिवार्य रूप से एसक्यूएल इंजेक्शन के खिलाफ बचाव के समान है आवेदन उपयोगकर्ता इनपुट स्वच्छ चाहिए विशेष रूप से, एकल।। और डबल उद्धरण वर्णों को अस्वीकार कर दिया जाना चाहिए। यह या तो आवेदन में, या किसी तृतीय पक्ष उत्पाद (उदाहरण के लिए एप्लिकेशन फ़ायरवॉल) में किया जा सकता है। XPath इंजेक्शन के लिए परीक्षण अनुप्रयोग संवेदनशीलता परीक्षण को आसानी से द्वारा एक एकल उद्धरण इंजेक्शन दिया जा सकता है या एक डबल उद्धरण , और प्रतिक्रिया का निरीक्षण। अगर एक त्रुटि आ गई है, तो यह संभव है कि एक XPath इंजेक्शन संभव है। "
के रूप में अन्य लोगों ने कहा, एक भी ध्यान कुल्हाड़ियों और // संक्षिप्त नाम का उपयोग करने के लिए भुगतान करना चाहिए। अगर XPath 2.0 इस्तेमाल किया जा रहा है, तो doc
() समारोह, नहीं अनुमति दी जानी चाहिए के रूप में यह ज्ञात यूआरआई (या फ़ाइल का नाम) के साथ किसी भी दस्तावेज़ तक पहुँच देता है।
किसी API जो एक XPath अभिव्यक्ति precompiles लेकिन संभावना है कि यह गतिशील रूप में परिभाषित किया गया मानकों के साथ काम करता है पत्ते का प्रयोग उचित है या चर। फिर उपयोगकर्ता इनपुट इन पैरामीटर की सामग्री को परिभाषित करेगा और पहले से ही संकलित अभिव्यक्ति के संशोधन के रूप में कभी नहीं माना जाएगा।
अपनी रणनीति को उल्टा करें।
अस्वीकार्य वर्ण को फिल्टर करने की कोशिश न करें - की नीति
इसके बजाय "जब तक मैं जानता हूँ कि यह बुरा है मान लें यह ठीक है", स्वीकार्य अक्षरों में फिल्टर - की नीति "यह सामान ठीक है, मैं मानता हूं कि सबकुछ खराब है "।
सुरक्षा शर्तों में, "डिफ़ॉल्ट स्वीकृति" के बजाय "डिफ़ॉल्ट अस्वीकार" की नीति अपनाएं।
उदाहरण के लिए ...
... यदि आप एक खोज पद के लिए किसी को पूछ रहे हैं, कहते हैं कि एक व्यक्तियों प्रथम नाम, केवल वे वर्ण जो आप के नाम में पाने की उम्मीद करने के लिए इनपुट की सीमा।
एक तरीका ए-जेड तक सीमित होना होगा और फिर सुनिश्चित करें कि आपकी खोज तकनीक उच्चारण है (उदाहरण के लिए i = ì = í = î = ï और इसी तरह), हालांकि यह गैर-यूरोपीय नामकरण पर पड़ती है।
... यदि आप किसी संख्या के लिए पूछ रहे हैं, तो केवल अंकों तक सीमित करें और बाकी सब कुछ अस्वीकार करें।
इस भेद्यता को बंद करना सिर्फ एक हॉटफिक्स है। इसलिए नीति लागू करना "डिफ़ॉल्ट अस्वीकार" अब बहुत खतरनाक है। मैं निम्नलिखित प्रतीक [के लिए इनपुट की जाँच करने का फैसला किया, ", ', *, =, {, \,।, अंतरिक्ष। मुझे लगता है कि यह सबसे आम हमलों को रोकने सकता है आप सभी उत्तर के लिए धन्यवाद!
आह, आप (या आपके उत्तराधिकारी) हॉटफिक्स की तरह बाद में कड़वाहट से पछतावा करेंगे ... http: //en.wikipedia.org/wiki/Technical_debt – bortzmeyer
का सत्यापन इनपुट स्ट्रिंग उपयोगी हो सकती है, हो सकता है कि नियमित अभिव्यक्ति (कुछ इस तरह \^+) की तरह कुछ उपयोग करें, उस पर आधारित कोई विशेष वर्णों की अनुमति नहीं दी जाएगी।
- 1. वसंत (एमवीसी) एसक्यूएल इंजेक्शन से बचने के लिए?
- 2. एक्सएमएल पाथ ('') के लिए: "विशेष" वर्णों से बचने
- 3. विशेष वर्णों से बचने जैसे एंड्रॉइड एक्सएमएल
- 4. सी # कोड से एमएसएसएलएल सर्वर पर एसक्यूएल इंजेक्शन से बचने के लिए एल्गोरिदम?
- 5. वेग में # से बचने के लिए कैसे
- 6. कैसे से बचने के लिए अपरिभाषित ऑफसेट
- 7. एसक्यूएल क्वेरी टाइमआउट से बचने के लिए कैसे करें
- 8. एमक्यूआरसी 2033 से बचने के लिए कैसे करें NO_MSG_AVAILABLE
- 9. प्रीकंपील्ड हेडर से बचने के लिए कैसे करें
- 10. स्कैला: मैकबेल से बचने के लिए कैसे करें
- 11. पॉलिमॉर्फिक एसोसिएशन से बचने के लिए कैसे करें
- 12. संगीतकार से बचने के लिए कैसे करें संदेश
- 13. सशर्त बचने विशेष एक्सएमएल पात्रों
- 14. एसक्यूएल इंजेक्शन हमलों से बचने के लिए एक उपयुक्त समाधान htmlencoding है?
- 15. PHP: तैयार किए गए बयानों का उपयोग करके और एसक्यूएल इंजेक्शन बनाम से बचने के लिए
- 16. सीआरटीपी गतिशील बहुरूपता से बचने के लिए
- 17. से बचने के लिए और एक यूआरएल
- 18. फोर्स रेजर यूआरएल से बचने के लिए
- 19. मैपिंग: कुंजी से बचने के लिए nohlsearch
- 20. Django टेम्पलेट्स में ऑटो से बचने के लिए कैसे?
- 21. मुख्य धागे भूख से बचने के लिए कैसे?
- 22. Xml से बचने के लिए/एन्कोडिंग शब्दावली
- 23. हाइबरनेट से बचने के लिए रणनीतियां LazyInitializationExceptions
- 24. विधवाओं से बचने के लिए जावास्क्रिप्ट
- 25. एक्सएसएल - एक विशेषता के लिए आउटपुट से बचने के लिए कैसे अक्षम करें?
- 26. उसी उपयोगकर्ता के लिए एकाधिक लॉगिन से बचने के लिए कैसे करें
- 27. ग्रहण/एंड्रॉइड में एक्सएमएल में कोण ब्रैकेट से बचने
- 28. sqlalchemy में कैशिंग से बचने के लिए कैसे?
- 29. पावरहेल पर कमांड लाइन तर्क से बचने के लिए कैसे?
- 30. कई से बचने के लिए कैसे अशक्त चेकों
ऐसा लगता है कि - जैसे कि एसक्यूएल इंजेक्शन के साथ - XPath चर का उपयोग इंजेक्शन को बहुत अधिक रोकता है। – kdgregory
क्या आप "गतिशील रूप से परिभाषित चर" और XPath अभिव्यक्ति को कैसे आपूर्ति करें, इस पर एक उदाहरण प्रदान कर सकते हैं? विशेष रूप से, यह .NET में ऐसा कैसे करेगा? मैंने केवल स्ट्रिंग कॉन्सटेनेशन के साथ इसे देखा है। – frankadelic
@ फ्रैंकडेलिक: http: //msdn.microsof t.com/en-us/library/system.xml.xsl.xsltcontext.resolvevariable.aspx –