2013-01-13 16 views
6

जावास्क्रिप्ट आपको ऑब्जेक्ट्स के लिए निजी डेटा या विधियां नहीं देता है, जैसे आप सी ++ में कर सकते हैं। ओह, वास्तव में, हाँ, यह बंद करने सहित कुछ कामकाज के माध्यम से करता है। लेकिन एक पायथन पृष्ठभूमि से आ रहा है, मुझे विश्वास है कि "गोपनीयता का बहाना" (सम्मेलन और दस्तावेज़ीकरण नामकरण के माध्यम से) काफी अच्छा है, या शायद "लागू गोपनीयता" (जावास्क्रिप्ट द्वारा लागू) के लिए भी बेहतर है। निश्चित रूप से, मैं उन परिस्थितियों के बारे में सोच सकता हूं जहां यह सत्य नहीं है - उदा। लोग आरटीएफएम के बिना मेरे कोड के साथ इंटरफ़ेस करते हैं लेकिन मुझे दोषी ठहराया जाता है - लेकिन मैं उस स्थिति में नहीं हूं।क्या जावास्क्रिप्ट "नकली गोपनीयता" सुरक्षा जोखिम उत्पन्न करता है?

लेकिन, कुछ मुझे रोक देता है। जावास्क्रिप्ट गुरु डगलस क्रॉकफोर्ड, "जावास्क्रिप्ट: द गुड पार्ट्स" और अन्यत्र, बार-बार नकली गोपनीयता को "सुरक्षा" मुद्दे के रूप में संदर्भित करता है। For example, "एक हमलावर आसानी से सीधे फ़ील्ड तक पहुंच सकता है और विधियों को अपने आप से बदल सकता है"।

मैं इससे उलझन में हूं। ऐसा लगता है कि अगर मैं न्यूनतम सुरक्षा प्रथाओं का पालन करता हूं (मान्य करता हूं, अंधे से भरोसा न करें, ब्राउजर से मेरे सर्वर पर भेजा गया डेटा; मेरी साइट पर तीसरे पक्ष की स्क्रिप्ट शामिल न करें) तो वहां कोई स्थिति नहीं है प्रस्तुति-गोपनीयता लागू गोपनीयता से कम "सुरक्षित" है। क्या वह सही है? यदि नहीं, तो ऐसी स्थिति क्या है जहां नाटक-गोपनीयता बनाम लागू-गोपनीयता में सुरक्षा प्रभाव पड़ता है?

+0

"निरीक्षण" 3-पक्ष स्क्रिप्ट साइटों के कुछ प्रकार के लिए एक गंभीर चुनौती हो सकती है। यदि आप अन्य सर्वरों से स्क्रिप्ट खींच रहे हैं तो वे किसी भी समय बदल सकते हैं। – Pointy

+0

मुझे ऐसा लगता है कि अगर मैं से लागू-गोपनीयता कोडिंग तरीकों का उपयोग कर लगभग कुछ भी नहीं अराजकता स्क्रिप्ट पैदा कर सकता है कि कम करने के लिए करता है अपनी साइट पर एक बुराई 3 तीय-पक्ष स्क्रिप्ट शामिल हैं। उदाहरण के लिए, स्क्रिप्ट पृष्ठ पर किसी भी या सभी HTML को फिर से लिख सकती है, यह उपयोगकर्ता के पासवर्ड को मेरे सर्वर आदि के बजाय एक बुरा सर्वर पर भेज सकती है। –

+0

हाँ मैं सहमत हूं; यह "बुराई" के बारे में इतना कुछ नहीं है क्योंकि यह मुझे लगता है कि "बुरा" है। आम तौर पर यह मानना ​​सुरक्षित है कि विज्ञापनदाता शत्रुतापूर्ण नहीं हैं, लेकिन वे अक्षम भी हो सकते हैं। – Pointy

उत्तर

0

ऐसा लगता है कि जवाब "नहीं, नकली गोपनीयता ठीक है"। यहाँ कुछ विस्तारण हैं:

  • जावास्क्रिप्ट में के रूप में यह आज मौजूद है, तो आप अपने वेब पेज पर एक अज्ञात और अविश्वस्त तीसरे पक्ष के स्क्रिप्ट शामिल नहीं कर सकते। यह विनाश को खत्म कर सकता है: यह पृष्ठ पर सभी HTML को फिर से लिख सकता है, यह उपयोगकर्ता को उसके पासवर्ड के लिए संकेत दे सकता है और फिर उसे एक बुरा सर्वर आदि भेज सकता है। जावास्क्रिप्ट कोडिंग शैली इस मूल तथ्य में कोई फर्क नहीं पड़ता। इस से निपटने के तरीकों की चर्चा के लिए PleaseStand's answer देखें।

  • एक अक्षम लेकिन बुराई लिपि अनजाने में नाम विवादों के माध्यम से गड़बड़ नहीं कर सकती है। सामान्य नामों के साथ बहुत से वैश्विक चर बनाने के खिलाफ यह एक अच्छा तर्क है, लेकिन नकली-निजी चर से बचने के लिए इसका कोई लेना-देना नहीं है।उदाहरण के लिए, मेरी केला-बिक्री वेबसाइट नकली-निजी चर window.BANANA_STORE_MODULE.cart.__cart_item_array का उपयोग कर सकती है। यह पूरी तरह से असंभव नहीं है कि इस चर को गलती से किसी तृतीय-पक्ष स्क्रिप्ट द्वारा ओवरराइट किया जाएगा, लेकिन यह असाधारण रूप से असंभव है।

  • वहाँ एक भविष्य संशोधन जावास्क्रिप्ट कि एक नियंत्रित वातावरण जहां अविश्वस्त कोड निर्धारित तरीकों से कार्य कर सकते हैं प्रदान करेगा की के लिए ideas floating around हैं। मैं अविश्वसनीय तीसरे पक्ष के जावास्क्रिप्ट विशिष्ट उजागर तरीकों के माध्यम से मेरी जावास्क्रिप्ट के साथ बातचीत करते हैं, और, एचटीएमएल तक पहुँचने आदि यदि यह कभी मौजूद है, यह एक परिदृश्य में जहाँ निजी चर सुरक्षा के लिए आवश्यक हैं हो सकता है से तीसरे पक्ष के स्क्रिप्ट ब्लॉक सकता है। लेकिन यह अभी तक अस्तित्व में नहीं है।

  • स्पष्ट और बग-मुक्त कोड लेखन हमेशा की तरह,, सुरक्षा के लिए उपयोगी है जाहिर है। वास्तव में-निजी चर और विधियों के रूप में स्पष्ट और बग-मुक्त कोड लिखना आसान या कठिन बनाता है, एक सुरक्षा निहितार्थ है। चाहे वे सहायक हों या नहीं, हमेशा बहस और स्वाद का विषय होंगे, और क्या आपकी पृष्ठभूमि है, कहें, सी ++ (जहां निजी चर केंद्रीय हैं) पाइथन बनाम (जहां निजी चर कोई नहीं हैं)। प्रसिद्ध ब्लॉग पोस्ट Javascript Private Variables are Evil समेत दोनों दिशाओं में तर्क हैं।

मेरे भाग के लिए, मैं नकली गोपनीयता का उपयोग कर रखना होगा: एक अग्रणी अंडरस्कोर (या जो भी) अपने आप को और अपने सहयोगियों को इंगित करता है कि कुछ संपत्ति या विधि एक मॉड्यूल का सार्वजनिक रूप से समर्थन किया इंटरफ़ेस का हिस्सा नहीं है। मेरा नकली-गोपनीयता कोड अधिक पठनीय (आईएमओ) है, और मुझे इसकी संरचना करने में अधिक स्वतंत्रता है (उदाहरण के लिए एक बंद दो फाइलों तक नहीं फैल सकता है), और जब मैं डीबग और प्रयोग करता हूं तो मैं उन नकली-निजी चरों तक पहुंच सकता हूं। मैं चिंता करने वाला नहीं हूं कि ये प्रोग्राम किसी अन्य जावास्क्रिप्ट प्रोग्राम की तुलना में किसी भी तरह से असुरक्षित हैं।

1

अपने आप में नहीं। हालांकि, इसका मतलब यह है कि आप अपने एचटीएमएल दस्तावेज़ों में अविश्वसनीय जावास्क्रिप्ट कोड को सुरक्षित रूप से लोड नहीं कर सकते हैं, क्योंकि क्रॉकफोर्ड बताते हैं। यदि आपको वास्तव में ब्राउज़र में ऐसे अविश्वसनीय जावास्क्रिप्ट कोड को चलाने की आवश्यकता है (उदा। सोशल नेटवर्किंग साइटों में उपयोगकर्ता द्वारा सबमिट किए गए विजेट के लिए), iframe sandboxing पर विचार करें।

वेब डेवलपर के रूप में, आपकी सुरक्षा समस्या अक्सर होती है कि प्रमुख इंटरनेट विज्ञापन ब्रोकर अक्सर अपने विज्ञापन कोड को फ़्रेम करने का समर्थन नहीं करते हैं (या यहां तक ​​कि prohibit)। दुर्भाग्यवश, आपको दुर्भावनापूर्ण जावास्क्रिप्ट वितरित करने के लिए Google पर भरोसा करना है, चाहे जानबूझकर या अनजाने में (उदा। वे हैक हो जाएं)।

यहाँ मैं another question के जवाब के रूप था आइफ्रेम सैंडबॉक्सिंग का एक संक्षिप्त विवरण है:

उपयोगकर्ताओं द्वारा जमा किए HTML के लिए विशेष रूप से एक पूरी तरह से अलग डोमेन नाम (उदाहरण के लिए "exampleusercontent.com") सेट करें , सीएसएस, और जावास्क्रिप्ट। इस सामग्री को अपने मुख्य डोमेन नाम के माध्यम से लोड करने की अनुमति न दें। फिर iframes का उपयोग कर अपने पृष्ठों में उपयोगकर्ता सामग्री एम्बेड करें।

आप सरल तैयार की तुलना में तंग एकीकरण की जरूरत है, window.postMessage() मदद मिल सकती है, अलग अलग फ्रेम में स्क्रिप्ट एक नियंत्रित तरीके से एक दूसरे के साथ संवाद करने के लिए अनुमति देता है।

+1

कथन "आप अपने एचटीएमएल दस्तावेज़ों में अविश्वसनीय जावास्क्रिप्ट कोड को सुरक्षित रूप से लोड नहीं कर सकते हैं" - ऐसा लगता है कि इसका नकली-गोपनीयता जावास्क्रिप्ट कोडिंग से कोई लेना-देना नहीं है। यह सच है कि मैं अपना जावास्क्रिप्ट कोड कैसे लिखूं। सही? आखिरकार, अविश्वसनीय लिपि सीधे किसी भी या सभी HTML, आदि को फिर से लिख सकती है। –

+0

@SteveB: हां। जहां तक ​​मुझे पता है, पृष्ठ के कुछ हिस्सों में स्क्रिप्ट को प्रतिबंधित करने के लिए किसी भी वेब ब्राउजर में मूल कार्यक्षमता (आईफ्रेम के अलावा) नहीं है, हालांकि ऐसी कार्यक्षमता निश्चित रूप से कार्यान्वित की जा सकती है। "फर्जी गोपनीयता" वास्तव में केवल एक बार संबोधित होती है जिसे संबोधित किया जाता है। – PleaseStand

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