2012-12-02 15 views
5

मैं सिर्फ एक विचार के साथ टकरा रहा था, और मैं सुरक्षा मुद्दों को चुनौती देने के बिना बैकएंड में इसे हल करने का कोई तरीका नहीं सोच सका।'अविश्वसनीय' उपयोगकर्ताओं से एल्गोरिदम का मूल्यांकन

कहें कि मैं उपयोगकर्ताओं को एक webservice के माध्यम से सरल एल्गोरिदम बनाने का अवसर देना चाहता हूं और इन्हें छोटी सूचियों पर परीक्षण करना चाहता हूं, उदा। range(0, 5) फिर परिणामों को वापस किसी अन्य webservice, टेम्पलेट या ईमेल के माध्यम से रिपोर्ट करें, वास्तव में कोई फर्क नहीं पड़ता, यह मूल्यांकन है जो मुझे परेशान करता है।

का उपयोग अजगर:

class Algorithm(whatever): 
    function = whatever.CharField(max_length=75) 

एक उपयोगकर्ता की तरह कुछ में प्रवेश हो सकता है: किसी भी बनाया-इन अलग करना

'f(x)=x+(x/5)**0.75' 

बेशक मुझे eval इस्तेमाल कर सकते हैं में से हैं, की तुलना में "x" आदि अन्य तार, लेकिन यह अभी भी दुर्भाग्यपूर्ण अभ्यास होगा।

एकमात्र चीज जो मैं कर सकता हूं किसी भी मूल्यांकन कार्यक्षमता को जावास्क्रिप्ट फ्रंट एंड पर ले जाना है।

+1

ठीक है, Google निश्चित रूप से इस तरह की चीज को उनके कोडजैम में करता है। तो मुझे आश्चर्य है कि वे इस मुद्दे को कैसे हल करते हैं। शायद आवश्यक सेटअप के साथ अविश्वसनीय कोड एक वीएम चलाएं। इसलिए यदि वे वीएम को बोर्क करते हैं, तो भी आप सुरक्षित हैं – inspectorG4dget

+0

यदि आप अंतिम "आयात" कुंजी शब्द को हटाते हैं तो डेटा नुकसान के मामले में कुछ भी नहीं होना चाहिए। –

+0

@MaxLi '__import__' के बारे में क्या? – Natan

उत्तर

3

eval() बुरा है, और बैकएंड पर ऐसा करना बहुत खतरनाक है। हालांकि इसे python sandbox का उपयोग करके सुरक्षित रूप से किया जा सकता है। लेकिन अगर सैंडबॉक्स असफल हो, तो आप स्वामित्व प्राप्त करेंगे। जो "गहराई में रक्षा" दृष्टिकोण नहीं है।

क्लाइंट पक्ष पर पेलोड का मूल्यांकन करने के लिए एक बेहतर तरीका होगा ... हालांकि यह क्रॉस-साइट स्क्रिप्टिंग (एक्सएसएस) है। किसी हमलावर को इस समस्या का फायदा उठाने में सक्षम होने से रोकने का एक तरीका, क्लाइंट पक्ष पर एक ईवेंट हैंडलर है जो बटन दबाए जाने पर फ़ॉर्म का मूल्यांकन करता है। यदि हमलावर जीईटी या POST अनुरोध बना सकता है जो जावास्क्रिप्ट निष्पादित करता है तो वह एक्सएसएस भेद्यता का फायदा उठा सकता है। clickjacking को रोकने के लिए x-frame-options: deny सेट करना भी सुनिश्चित करें।

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