2011-05-24 2 views
14

मेरे पास एक webservice है जो प्रमाणीकृत मशीनों से एक्सएमएल के रूप में कुछ इनपुट लेगा (यह एक नेटवर्क प्रबंधन प्रणाली के लिए है जिसे मैं किसी अन्य सॉफ़्टवेयर के साथ एकीकृत कर रहा हूं) और तर्क के रूप में कुछ XML डेटा के साथ एक शैल स्क्रिप्ट निष्पादित करता हूं।जावा में शेल कमांड से बच रहे हैं?

जावा (/ लिनक्स) में, शेल कमांड से बचने का सबसे अच्छा तरीका क्या है यह सुनिश्चित करने के लिए कि कोई मेरे webservice पर दुर्भावनापूर्ण तर्क नहीं दे सकता है?

एक अत्यंत सरल उदाहरण में

असल में, मैं WS

<foo> 
<bar>ABCDEF</bar> 
</foo> 

then running somescript.pl <<data in <bar> field>> here 

मैं यह सुनिश्चित करना है कि इस, मनमाने ढंग से खोल आदेश पर अमल करने के लिए आदि नहीं किया जा सकता की जरूरत है के माध्यम से में कुछ इनपुट लेने।

धन्यवाद!

+0

कौन सा खोल? विभिन्न गोले अलग-अलग भागने वाले सम्मेलन होते हैं। –

+1

सवाल जावा पर लिनक्स पर बताता है। –

+1

@Gweebz, जो "कौन सा खोल" प्रश्न का उत्तर नहीं देता है। लिनक्स में कई अलग-अलग गोले हैं। – Kaj

उत्तर

12

मैं ProcessBuilder या Runtime.exec तरीकों जो खोल के माध्यम से नहीं रन करता है में से एक का उपयोग कर सुझाव है और इस तरह खोल बचने (यहाँ) इंजेक्शन हमलों से बचने के आवश्यकता नहीं है।

  • ProcessBuilder - Runtime.exec तुलना में अधिक लचीला।

  • Runtime.exec(String[]) - पर्ल तुच्छता STDIN से पढ़ने संभाल कर सकते हैं - फार्म का है कि केवल एक String

लेता है यह भी एक्सएमएल डेटा स्थानांतरित करने की प्रक्रिया के STDIN पाइप के उपयोग पर विचार के लिए फायदेमंद हो सकता है से अलग है। आमतौर पर कमांड लाइन तर्क के साथ सीमाएं होती हैं।

हैप्पी कोडिंग।

+1

वास्तव में एक समझदार जवाब। अगर आप पहले नहीं थे, तो मैंने इसे वही लिखा होगा, शब्द द्वारा शब्द। +1 – gd1

+0

तत्काल, सूचनात्मक उत्तर के लिए धन्यवाद! – Yablargo

0

यदि आप प्रोसेसबिल्डर का उपयोग नहीं कर सकते हैं तो आप Apache commons-text escapeXSI पर विचार कर सकते हैं।

(कभी भी नाम को ध्यान में रखें - एक्सएसआई एक्स/ओपन सिस्टम इंटरफेस एक्सटेंशन है, Single UNIX Specification पर एक पूरक विनिर्देश है, इसलिए यूनिक्स की तरह जो कुछ भी प्रयास करता है, उतना ही कम या कम इसका अनुपालन करता है)।