में सैनिटरी शेल कमांड या सिस्टम कॉल बनाना, मैं एक डिमन बना रहा हूं जो मुझे मेरे सर्वर (प्रबंधन) को प्रबंधित करने में मदद करेगा। वेबमिन ठीक काम करता है, जैसा कि सर्वर पर सिर्फ एक खोल खोलता है, लेकिन मैं यूआई डिज़ाइन से सर्वर ऑपरेशंस को नियंत्रित करने में सक्षम होना चाहता हूं, और उपयोगकर्ताओं को समाप्त करने के लिए कुछ कार्यक्षमता का खुलासा करना चाहता हूं।रूबी
डिमन एक कतार से क्रियाएं उठाएगा और उन्हें निष्पादित करेगा। हालांकि, चूंकि मैं उपयोगकर्ताओं से इनपुट स्वीकार कर रहा हूं, इसलिए मैं यह सुनिश्चित करना चाहता हूं कि उन्हें किसी विशेषाधिकार प्राप्त शेल कमांड में खतरनाक कुछ इंजेक्ट करने की अनुमति नहीं है।
def perform
system "usermod -p #{@options['shadow']} #{@options['username']}"
end
एक सार बताते हैं कि अधिक:
यहाँ एक टुकड़ा है कि मेरी समस्या एक मिसाल है https://gist.github.com/773292
मैं सकारात्मक नहीं कर रहा हूँ अगर ठेठ एस्केपिंग और आदानों की sanitizing इस मामले के लिए पर्याप्त है, और किया जा रहा है एक डिजाइनर, मेरे पास सुरक्षा से संबंधित अनुभव का एक टन नहीं है। मुझे पता है कि यह ऐसा कुछ है जो शायद मेरे लिए स्पष्ट होना चाहिए, लेकिन इसकी नहीं!
मैं कैसे सुनिश्चित कर सकता हूं कि वेब एप्लिकेशन जो क्रियाएं बनाएगा और क्रमबद्ध करेगा, वह खतरनाक पाठ को विशेषाधिकार प्राप्त प्रक्रिया में पारित नहीं कर सकता है जो क्रियाएं प्राप्त करता है?
मदद
एआरबी
तो, मान लें कि अगर मैंने इस कक्षा का खुलासा किया, तो पूरी तरह से unfiltered (मैं नहीं) एक अंतिम उपयोगकर्ता के लिए, और उन्होंने एक छाया हैश और फिर "उपयोगकर्ता नाम; आरएम-आरएफ /" उपयोगकर्ता नाम के रूप में प्रदान किया - यह नहीं होगा '/' – arbales
सही करने का प्रभाव है। तर्क सीधे निष्पादित कार्यक्रम में पास किए जाते हैं। आप इसे स्वयं से सत्यापित कर सकते हैं। 'Ruby -e 'प्रणाली * डब्ल्यू (ls -l foo; rm -rf /)'' – cam
आह चलने का प्रयास करें, ठीक है। यह सही समझ में आता है। मुझे लगता है कि मेरे पास यह विचार है कि एक आवेदन सुनिश्चित करना सुरक्षित है, स्वाभाविक रूप से कठिन होना चाहिए, सरल चरणों और तथ्यों से कठिन, जैसे कि सब कुछ के लिए एक खतरनाक बढ़त मामला मौजूद है।ऐसा इसलिए है क्योंकि मैंने इसके बारे में बहुत कुछ नहीं पढ़ा/सीखा नहीं है। – arbales