2010-10-18 14 views
5

मैं सार्वजनिक विकी पर कुछ कार्यों को आंशिक रूप से स्वचालित करने में सहायता के लिए एक स्क्रिप्टिंग भाषा लागू करना चाहता हूं। मैं सर्वर पर Google Caja जैसे कुछ भी इंस्टॉल नहीं कर सकता या विकी सॉफ़्टवेयर को स्वयं संशोधित नहीं कर सकता, लेकिन मैं क्लाइंट-साइड निष्पादन के लिए जावास्क्रिप्ट कोड इंस्टॉल कर सकता हूं। चूंकि मेरा इरादा सामान्य उपयोगकर्ताओं को स्क्रिप्ट बनाने और पोस्ट करने की अनुमति देना है, इसलिए जावास्क्रिप्ट का उपयोग करना असुरक्षित है और खाता समझौता कर सकता है।जावास्क्रिप्ट में लागू सरल, सुरक्षित स्क्रिप्टिंग भाषा?

क्या ऐसी स्क्रिप्टिंग भाषा कार्यान्वयन मौजूद है, या यदि नहीं, तो क्या यह अपेक्षाकृत आसान है? मेरा ध्यान पाठ प्रसंस्करण, अजाक्स अनुरोध, और कार्यान्वयन की आसानी पर है।

  1. विकी पेज के नाम और उसे हटाने के लिए एक अच्छे कारण के लिए उपयोगकर्ता से पूछें:

    यहाँ एक उदाहरण काम के लिए एक स्क्रिप्ट, प्रदर्शन करने के लिए की आवश्यकता होगी Wikipedia's procedure for requesting article deletion से लिया है।

  2. उस पृष्ठ का स्रोत कोड प्राप्त करें, शीर्ष पर एक हटाना नोटिस जोड़ें, और नया टेक्स्ट सहेजें।
  3. एक नया पृष्ठ बनाएं (इसका नाम पहले पृष्ठ के नाम पर आधारित है) जिसमें हटाने के कारण शामिल हैं।
  4. पृष्ठ संपादित करने वाले उपयोगकर्ताओं की सूची प्राप्त करें और पहले व्यक्ति को सूचित करें (फिर से, एक विशिष्ट पृष्ठ को संपादित करके) कि जिस पृष्ठ को उन्होंने बनाया है उसे हटाया जा रहा है।
+0

यदि आप चाहते हैं कि यह भाषा दोनों एजेक्स अनुरोध करने और डीओएम को एक्सेस/संशोधित करने में सक्षम हो, तो आप केवल जेएस पर कोई सुरक्षा प्राप्त नहीं कर रहे हैं (यदि यह डोम को छू नहीं सकता है तो यह _might_ कोई समस्या नहीं है) – tobyodavies

+0

विचार किसी भी मनमाने ढंग से डीओएम संशोधन या अजाक्स अनुरोधों की अनुमति नहीं है, केवल वे लोग जो अपेक्षाकृत "सुरक्षित" हैं और उपयोगकर्ता को वास्तव में किए गए कार्यों की एक सूची दिखाए जाने के बाद आसानी से पूर्ववत किया जा सकता है। – PleaseStand

+0

मुझे बिल्कुल समझ में नहीं आता है। यह "स्क्रिप्टिंग भाषा" क्या करने में सक्षम होना चाहिए? – Pointy

उत्तर

3

यहां जावास्क्रिप्ट में टीसीएल का कार्यान्वयन है: Tcl in Javascript

यहां स्रोत है: tcl.jsA little tcl.js console

Tcl चाय के अपने कप नहीं हो सकता है, लेकिन कार्यान्वयन काफी सरल सीधा दिखता है:

और यहाँ कोड के साथ खेलने के लिए अपने ब्राउज़र में एक लाइव कंसोल को लागू है। यह मुख्य रूप से इसलिए है क्योंकि टीसीएल स्वयं ही एक साधारण भाषा है। आप चर और कार्यों को कार्यान्वित करने के तरीके पर विचार प्राप्त करने के लिए इसका उपयोग कर सकते हैं।

संकेत: टीसीएल में, नियंत्रण संरचनाएं कार्य करती हैं, इसलिए देखें कि अंतर्निहित कार्यों को कार्यान्वित करने के लिए कार्यान्वित किया गया है, जबकि और पूर्वानुमान।

1

आप बस सैंडबॉक्स कर सकते हैं; यानी, कुछ महत्वपूर्ण चरों में गुंजाइश है ताकि उपयोगकर्ता का कोड असुरक्षित वस्तुओं तक पहुंचने में असमर्थ हो।

var execSandboxedJS = function (jsCode) { 
    var window = document.getElementById('myRootElement'); 
    var document = window; 
    eval(jsCode); 
}; 

हालांकि, उपयोगकर्ता कोड AJAX अनुरोध करने की इजाजत देता है, अपने आप में, स्वाभाविक रूप से असुरक्षित है। अगर परियोजना के लिए कहा जाता है तो मैं परियोजना की स्वच्छता पर पुनर्विचार करूंगा।

+4

पर्याप्त नहीं है। स्टार्टर्स के लिए, जिसे विंडो के बजाए 'self' का उपयोग करके आसानी से तोड़ दिया जा सकता है। जावास्क्रिप्ट जिस तरह से है, सभी छेद पैच करना बेहद मुश्किल होगा - http://code.google.com/p/google-caja/wiki/AttackVectors देखें। – PleaseStand

2

डगलस क्रॉकफ़ोर्ड का ADsafe जावास्क्रिप्ट का एक सुरक्षित उप-समूह माना जाता है।

इसमें रनटाइम लाइब्रेरी (~ 20 केबी मिनीफाइड) और एक सत्यापनकर्ता शामिल है (JSLint में शामिल)। यदि क्रॉकफोर्ड को लाइसेंस से "सॉफ़्टवेयर का इस्तेमाल अच्छा, बुरा नहीं होगा", तो दोनों घटक जीपीएल-संगत ओपन-सोर्स प्रोग्राम होंगे।

क्योंकि जेएसलिंट एक जावास्क्रिप्ट प्रोग्राम है, यह पूरी तरह से वेब ब्राउज़र में उपयोगकर्ता स्क्रिप्ट को सत्यापित कर सकता है। यह Google कैजा के विपरीत है, जो जावा में लिखा गया है।

+0

ऐडसएफ़ अनंत लूप के बारे में कुछ भी नहीं लगता है या एक टाइमआउट लागू नहीं करता है, जिसका अर्थ है कि एक उपयोगकर्ता के लिए '(;;);' और कुछ अन्य उपयोगकर्ता के पेज को लॉक करना अभी भी संभव है; या कुछ 'ए = []; मेमोरी विस्फोट के लिए (;;) {a = [a, a]} 'के लिए। –