मुझे अपनी साइट पर उपयोगकर्ता द्वारा सबमिट की गई स्क्रिप्ट्स की सेवा करने की आवश्यकता है (जैसे jsfiddle)। मैं स्क्रिप्ट को आगंतुकों के ब्राउज़र पर एक सुरक्षित तरीके से चलाने के लिए चाहता हूं, जिस पृष्ठ पर वे सेवा कर रहे हैं उससे अलग है। चूंकि कोड उपयोगकर्ताओं द्वारा सबमिट किया गया है, इसलिए कोई गारंटी नहीं है कि यह भरोसेमंद है।मैं अविश्वसनीय उपयोगकर्ता द्वारा सबमिट की गई जावास्क्रिप्ट सामग्री को सैंडबॉक्स कैसे कर सकता हूं?
अभी मैं तीन विकल्प के बारे में सोच सकते हैं:
- एक अलग डोमेन से एक iframe में उपयोगकर्ताओं द्वारा प्रदत्त सामग्री की सेवा, और एक ही मूल नीति पर निर्भर हैं। इसके लिए एक अतिरिक्त डोमेन स्थापित करने की आवश्यकता होगी जिसे मैं संभव से बचाना चाहता हूं। मेरा मानना है कि यह कैसे है jsfiddle यह करता है। स्क्रिप्ट अभी भी कुछ नुकसान कर सकती है, उदाहरण के लिए
top.location.href
बदलना, जो आदर्श से कम है। http://jsfiddle.net/PzkUw/ - sandbox attribute का उपयोग करें। मुझे संदेह है कि यह ब्राउज़र में अच्छी तरह से समर्थित नहीं है।
- उन्हें सेवा देने से पहले स्क्रिप्ट को स्वच्छ करें। मैं वहां नहीं जाऊंगा।
क्या ऊपर कोई अन्य समाधान या सिफारिशें हैं?
अद्यतन
हैं, के रूप में मुझे लगता है, पहला विकल्प सबसे अच्छा समाधान है, क्या दुर्भावनापूर्ण स्क्रिप्ट शीर्ष विंडो स्थान बदलने के अलावा अन्य क्या कर सकते हैं, और मैं यह कैसे रोका जा सकता है? मैं स्थैतिक कोड विश्लेषण के आधार पर कुछ स्क्रिप्ट का उपयोग या अस्वीकार कर सकता हूं लेकिन यह hard है जिसकी वस्तुओं को एक्सेस किया जा सकता है और जावास्क्रिप्ट को सामान्य रूप से सामान्य रूप से विश्लेषण करने में कठिनाई होती है। कम से कम, इसे एक पूर्ण उड़ा पार्सर और कई जटिल नियमों की आवश्यकता होगी (कुछ, लेकिन मुझे संदेह नहीं है कि इनमें से सभी जेएसलिंट में मौजूद हैं)।
मुझे लगता है कि आपका उप-डोमेन विचार सर्वोत्तम है। मैंने खुद इस सवाल को देखा है और एक बेहतर समाधान नहीं मिला। मैंने एक बार XmlHttpRequest के माध्यम से स्क्रिप्ट को गतिशील रूप से लोड करने और eval चलाने के साथ खेला - मुझे याद नहीं है कि मैंने इसे क्यों छोड़ा, हालांकि। –
संबंधित: http://stackoverflow.com/questions/958997/frame-buster-buster-buster-code-needed – Petah
मैं @ जेरेमीजेस्टारर से सहमत हूं। भले ही, क्या आपके पास कुछ जेएस तत्वों को नियंत्रित करने का मौका है, ** विंडो ** सबसे महत्वपूर्ण है? यदि ऐसा है, तो मैं इसे आईफ्रेम से किए गए कुछ अनुरोधों को अस्वीकार करने का प्रयास करूंगा लेकिन मुझे यकीन नहीं है कि यह कितना आसान होगा। – inhan