2017-04-15 7 views
10

मैं एक ActiveJob जो चलाने के लिए एक प्रणाली स्क्रिप्ट चलाता है:रेल कैसे रेल से प्रणाली आदेश को चलाने के लिए सुरक्षित रूप से आदेश

`grunt custom-job --src=files --dest="file" --vars='#{user_input_vars_from_json}'` 

प्वाइंट जा रहा है कि

user_input_vars_from_json 

एक json config जो के रूप में आता है है एक नियंत्रक से उपयोगकर्ता इनपुट पैरामीटर। मैं जेसन प्रारूप को मान्य करता हूं लेकिन मैं कैसे सुनिश्चित कर सकता हूं कि मेरे सिस्टम कमांड को कोई हानिकारक कोड नहीं भेजा गया है?

उत्तर

1

मैं इसे इसके साथ पेश करना चाहूंगा: किसी भी उपयोगकर्ता इनपुट को खतरनाक माना जाना चाहिए। मैं उपयोगकर्ता द्वारा प्रदत्त इनपुट का उपयोग करके किसी भी कमांड को निष्पादित करने की अनुशंसा नहीं करता।

पहली चीज़ जो आप करना चाहते हैं, उतना ही इनपुट को लॉक कर दें। बफर ओवरफ्लो और डीओएस हमलों को रोकने के लिए user_input_vars_from_json की लंबाई को सीमित करने पर विचार करें। मैं किसी भी अवांछित कुंजी/मानों को फ़िल्टर करने के लिए user_input_vars_from_json JSON में सेट करने के लिए "वर्र्स" को मान्य और प्रतिबंधित करने का तरीका जानने का प्रयास करने की भी अनुशंसा करता हूं।

require 'shellwords' 
system("grunt", "custom-job", "--src=files", '--dest="file"', "--vars=\"#{Shellwords.escape(user_input_vars_from_json)}\"" 
:

एक बार अपने इनपुट साफ किया जाता है, तो आप Kernel#system संयोजन में Shellwords के साथ अपने काम से अपने आदेश को क्रियान्वित करने में संभव के रूप में सुरक्षित के रूप में करीब पाने के लिए उपयोग कर सकते हैं

संबंधित मुद्दे