एक प्रोग्रामिंग भाषा के भीतर, मैं एक साधारण शेल कमांड निष्पादित करता हूं
cd var; echo > create_a_file_here
साथ वर एक चर कि (उम्मीद) एक जगह है जहाँ मैं फ़ाइल "create_a_file_here" बनाना चाहते हैं निर्देशिका की एक स्ट्रिंग है किया जा रहा है। अब यदि कोई इस कोड की लाइन को देखता है, तो उदाहरण के लिए इसे असाइन करना संभव है:
var = "; rm -rf /"
चीजें बहुत बदसूरत हो सकती हैं। उपरोक्त मामले से बचने के लिए स्ट्रिंग खोज करने के लिए हो सकता है हो सकता है एक तरह से वर की तरह कुछ विशेष वर्ण के लिए ';' शेल कमांड निष्पादित करने से पहले, लेकिन मुझे संदेह है कि यह संभवतः सभी कारनामों को कवर करता है।
क्या किसी को यह सुनिश्चित करने का एक अच्छा तरीका पता है कि "सीडी संस्करण" केवल एक निर्देशिका को बदलता है और कुछ नहीं?
sh
, या एक समान सिंटैक्स के साथ अपनी स्वयं की प्रोग्रामिंग भाषा बना रहे हैं , लेकिन var
आपको लिखने की आवश्यकता के बजाय विस्तार होता है cd "$var"
? या यह bash
साथ है shopt -s cdable_vars
? ओह, मुझे लगता है कि आप का मतलब है कि कुछ अन्य कार्यक्रम इन कमांडों को चलाने के लिए एक शेल की तलाश करते हैं। तो बस बोली var
, लेकिन सुनिश्चित करें कि इसमें एक उद्धरण चरित्र ही शामिल नहीं है ...
s='"'; echo "$s"
प्रिंट "
।
var=untrusted string
मूल कार्यक्रम में करते हैं, इसलिए var
एक पर्यावरण चर है जो पहले से ही सेट किया जाता है sh
। फिर आपको इसे हर बार इसे विस्तारित करने की आवश्यकता है, जो कि मज़बूती से करना संभव है। आह, मैं देख रहा हूं कि यह विचार पहले से ही स्टीफन के जवाब का हिस्सा है। <
var
एक तर्क के रूप में भी पास कर सकते हैं । उदाहरण के लिए बुलाsh
तर्क के साथ-c
,'cd "$1"; echo > create_a_file_here'
,'sh'
,var
काम करता है और कोई भी परिवर्तन की जरूरत नहीं हैvar
।'sh'
तर्क के रूप में पारित कर दिया है$0
।