मैं प्रोग्रामिंग अवधारणाओं को पढ़ाने के लिए वेबपैप पर काम कर रहा हूं। वेबपृष्ठों में प्रोग्रामिंग अवधारणा के बारे में कुछ पाठ है, फिर प्रोग्रामिंग समस्या का उत्तर देने के लिए उपयोगकर्ता को जावास्क्रिप्ट कोड को टेक्स्ट एडिटर विंडो में टाइप करने दें। जब उपयोगकर्ता "सबमिट" पर क्लिक करता है, तो मैं यह देखने के लिए टाइप किए गए पाठ का विश्लेषण करता हूं कि क्या उन्होंने समस्या हल की है या नहीं। उदाहरण के लिए, मैं उनसे पूछता हूं कि "f
नामक एक फ़ंक्शन लिखें जो इसके तर्क में तीन जोड़ता है"। ब्राउज़र या कंसोल कार्यों संभालने बिनामैं वेबपृष्ठ में उपयोगकर्ता कोड को सुरक्षित रूप से "eval" कैसे करूं?
- भागो JSLint सख्त सेटिंग्स के साथ पाठ पर, विशेष रूप से:
यहाँ है कि मैं क्या उपयोगकर्ता के टेक्स्ट का विश्लेषण करने कर रहा हूँ है।
- यदि कोई त्रुटि है, तो त्रुटियां दिखाएं और रोकें।
eval(usertext);
- असाइनमेंट पास करने के लिए शर्तों के माध्यम से लूप,
eval(condition)
। एक उदाहरण की स्थिति"f(1)===4"
है। शर्तें विश्वसनीय स्रोत से आती हैं। - उत्तीर्ण/असफल स्थितियों को दिखाएं।
मेरे प्रश्न: क्या यह सुरक्षा समस्याओं को रोकने के लिए पर्याप्त है? पागल होने के लिए मैं और क्या कर सकता हूं? क्या मैं चाहता हूं कि ऐसा करने का कोई बेहतर तरीका है?
यदि यह प्रासंगिक है तो मेरा आवेदन पाइथन बैकएंड के साथ Google ऐप इंजन पर है, JQuery का उपयोग करता है, इसमें व्यक्तिगत उपयोगकर्ता खाते हैं।
मुझे आश्चर्य है कि jsfiddle के पास कोई स्रोत/नोट उपलब्ध है ... मुझे यकीन है कि यह किसी बिंदु पर साइट पर आता है जो एक्सएसएस या इसी तरह के लिए कमजोर नहीं है।(एक्सएसएस * किसी और को * उस पृष्ठ पर evaled कोड को लिंक देने की इजाजत देता है जो तब उस उपयोगकर्ता को "चलाएगा" जो वास्तव में लिंक देखता है।) –
मुझे कहना है कि जब मैं जेएसलिंट का उपयोग अपने जेएस को स्कैन करने के लिए करता हूं संपीड़न से पहले मुद्दों मैं कोशिश करता हूं और हर सुविधा को अक्षम कर सकता हूं जो कि लेखक की वरीयता का प्रतिनिधित्व करता है और वास्तव में एक कोड मुद्दा नहीं है, तो मैं जो कहता हूं उसका 9 0% अवहेलना करता हूं और गायब अर्ध-कॉलन और इसी तरह की तलाश करता हूं। अगर मैं आप थे तो मैं सोचूंगा कि आपके उपयोगकर्ता 'त्रुटियों' जेएसलिंट को पढ़ने में कितना आनंद ले रहे हैं। – tomfumb
यह एक अच्छा मुद्दा है, मैं "स्टाइलिस्ट" चेक को बंद करने के लिए एक विकल्प जोड़ूंगा। लेकिन मैं डिफ़ॉल्ट रूप से सख्त होना चाहता हूं, परियोजना के बिंदु का हिस्सा साफ जावास्क्रिप्ट प्रोग्रामिंग सिखाना है। –