javascript
  • ajax
  • security
  • sandbox
  • 2010-06-28 19 views 6 likes 
    6

    मेरे पास एक वर्डप्रेस प्लगइन है जो AJAX के साथ पृष्ठों को लोड करता है और अन्य प्लगइन और "विजेट्स" के साथ संगतता सुनिश्चित करता है।डायनामिक रूप से इनबॉक्स जावास्क्रिप्ट को सैंडबॉक्स करने का सबसे अच्छा तरीका क्या है?

    function do_JS(e){ 
         var Reg = '(?:<script.*?>)((\n|.)*?)(?:</script>)'; 
         var match = new RegExp(Reg, 'img'); 
         var scripts = e.innerHTML.match(match); 
         var doc = document.write; 
         document.write = function(p){ e.innerHTML = e.innerHTML.replace(scripts[s],p)}; 
         if(scripts) { 
          for(var s = 0; s < scripts.length; s++) { 
           var js = ''; 
           var match = new RegExp(Reg, 'im'); 
           js = scripts[s].match(match)[1]; 
           js = js.replace('<!--',''); 
           js = js.replace('-->',''); 
           eval('try{'+js+'}catch(e){}'); 
          } 
         } 
         document.write = doc; 
        } 
    

    मैं जे एस थोड़ा बेहतर तो सैंडबॉक्स में सक्षम होने के लिए करना चाहते हैं:

    अभी के रूप में मैं सभी इनलाइन जेएस है कि अंदर सामग्री ब्लॉक अद्यतन करने की मूल्यांकन करने के लिए निम्नलिखित कोड का उपयोग कि संघर्ष का खतरा कम हो जाता है। एक विचार था कि मुझे गतिशील रूप से बनाना था और इसके अंदर जेएस चलाया जाना था, लेकिन मुझे उम्मीद थी कि संगतता सुनिश्चित करने और सुरक्षा बढ़ाने के लिए थोड़ा बेहतर तरीका था।

    उत्तर

    1

    संभावना यह आप वास्तव में क्या जरूरत है आप नहीं देंगे रहे हैं, लेकिन कैसे एक समारोह या स्वयं को क्रियान्वित समारोह शाब्दिक (function(){/*...*/})() अंदर अपनी स्क्रिप्ट पाठ लपेटकर के बारे में।

    var strEval = 'try{'; 
    strEval += 'widget[' + intWidgetNumber + '] = (function(){'; 
    strEval += js; 
    strEval += '})();'; 
    strEval += '}catch(e){}'; 
    

    यह सीधे eval uation की तुलना में अधिक सुरक्षा प्रदान करता है और एक ही दस्तावेज़ में कोड रहता है। नकारात्मकता यह है कि यदि आप जिस कोड को आयात कर रहे हैं वह वैश्विक चर के बारे में गन्दा है (शायद यही कारण है कि आप यह सटीक प्रश्न क्यों पूछ रहे हैं), तो आप अभी भी अपना कोड दूसरे कोड पर stomping कर सकते हैं। और यदि वे this कीवर्ड का उपयोग करते हैं, तो उनका कोड संभवतः कार्य के रूप में काम नहीं करेगा। लेकिन कम से कम एक encapsulated गुंजाइश में ठीक से घोषित चर और समारोह घोषणाओं रखेंगे।

    मैंने तीसरे पक्ष के कोड के साथ बहुत कुछ काम किया है (अधिकतर भयानक, भयानक लिखित विज्ञापन कोड) और मुझे सबसे अच्छा समाधान मिला है कि आपकी साइट कोड को लंबे और अद्वितीय नामस्थान में लपेटा जाए (mySiteUtils, mySiteGames, आदि या com.mysite.utils, com.mysite.games, आदि)। यदि कोई विज्ञापन एजेंसी कोड में ड्रॉप करने का निर्णय लेती है जो आपके सटीक नामस्थान से मेल खाती है तो वे आपके पृष्ठ को नष्ट कर देंगे, लेकिन अब तक ऐसा कभी नहीं हुआ है।

    2

    आप Caja साथ जावास्क्रिप्ट recompiling की कोशिश कर सकते: http://en.wikipedia.org/wiki/Caja_project

    +0

    दुर्भाग्यवश, यह प्लगइन उन सैकड़ों साइटों पर चलता है जिन्हें मैं बिल्कुल नियंत्रित नहीं करता, इसलिए मैं जेएस स्निपेट्स को कासा के माध्यम से माइस्पेस जैसी साइट की तरह नहीं चला सकता। समाधान को पुनर्वितरण करने की आवश्यकता है। –

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

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