2015-10-21 7 views
5

मैं Writing a WebSocket server पर MDN द्वारा प्रदान की एक गाइड पीछा कर रहा था, गाइड बिल्कुल स्पष्ट और समझने में आसान है ...वेबसाकेट्स का मुखौटा क्यों लगाया जाता है?

हालांकि इस ट्यूटोरियल मैं फ्रेम है कि ग्राहक से संदेश WebSocket भर में भाग गया निम्नलिखित पर भेजे जाते हैं:

 

0     1     2     3 
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-------+-+-------------+-------------------------------+ 
|F|R|R|R| opcode|M| Payload len | Extended payload length | 
|I|S|S|S| (4) |A|  (7)  |    (16/64)   | 
|N|V|V|V|  |S|    | (if payload len==126/127) | 
| |1|2|3|  |K|    |        | 
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + 
|  Extended payload length continued, if payload len == 127 | 
+ - - - - - - - - - - - - - - - +-------------------------------+ 
|        |Masking-key, if MASK set to 1 | 
+-------------------------------+-------------------------------+ 
| Masking-key (continued)  |   Payload Data   | 
+-------------------------------- - - - - - - - - - - - - - - - + 
:      Payload Data continued ...    : 
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 
|      Payload Data continued ...    | 
+---------------------------------------------------------------+ 
 

क्लाइंट द्वारा भेजे गए डेटा और फ्रेम को ठीक से अनमास्क करने के लिए कुछ फ़ंक्शंस बनाने के बाद, यह मुझे आश्चर्यचकित कर देता है कि डेटा को शुरू करने के लिए भी मुखौटा क्यों किया जाता है। मेरा मतलब है, आपको सर्वर से भेजे जा रहे डेटा को मास्क करने की ज़रूरत नहीं है ...

यदि किसी को बुरे कारणों से डेटा मिल रहा था, तो इसे मास्किंग कुंजी के साथ तुलना करना अपेक्षाकृत आसान हो सकता है क्योंकि मास्किंग कुंजी शामिल है पूरा संदेश या यहां तक ​​कि बशर्ते उनके पास कुंजी न हो, फ्रेम में मास्किंग-कुंजी केवल 2 बाइट लंबी है। कुंजी बहुत आसानी से डेटा को अनमास्क कर सकती है क्योंकि कुंजी बहुत छोटी है।

एक और कारण है कि मैं सोच रहा हूं कि डेटा का मुखौटा क्यों है क्योंकि आप टीएलएस/एसएसएल पर और डब्ल्यूटीएस (एसएसएल) पर डब्लूएसएस (वेबस्केट सिक्योर) का उपयोग करके मास्किंग से बेहतर अपने वेबसाकेट डेटा को सुरक्षित कर सकते हैं।

क्या मुझे इस बात की याद आ रही है कि WebSockets को मुखौटा क्यों किया जाता है? ऐसा लगता है कि क्लाइंट द्वारा भेजे गए डेटा को अनमास्क करने के लिए यह व्यर्थ संघर्ष जोड़ता है जब यह किसी भी सुरक्षा को शुरू करने के लिए नहीं जोड़ता है।

+2

आंशिक उत्तर यहां: [वेबसाकेट फ्रेम में मुखौटा क्या है] (http://stackoverflow.com/questions/14174184/what-is-the-mask-in-a-websocket-frame) और [मास्किंग है वेबसाकेट क्लाइंट से भेजते समय वास्तव में जरूरी है] (http://programmers.stackexchange.com/questions/226343/is-masking-really-necessary-when-sending-from-websocket-client) और [वेबशॉट फ़्रेमिंग कैश के विरुद्ध कैसे सुरक्षा करता है विषाक्तता] (http://security.stackexchange.com/questions/36930/how-does-websocket-frame-masking-protect-against-cache-poisoning)। – jfriend00

+0

@ jfriend00, यह कुछ अंतर्दृष्टि प्रदान करता है कि मानक इसे परिभाषित क्यों करता है। लेकिन मेरे तर्कों के साथ मैं अभी भी समझ में नहीं आता कि क्लाइंट द्वारा इसकी आवश्यकता क्यों है। –

+0

इसके अलावा [वेबसाकेट्स - हमें क्लाइंट से सर्वर पर डेटा मास्क करने की आवश्यकता क्यों है?] (Http://www.lenholgate.com/blog/2011/07/websockets---why-do-we-need-to-mask -डेटा-से-क्लाइंट-टू-सर्वर.html) – jfriend00

उत्तर

6

jfriend00 की टिप्पणी अच्छी जानकारी के लिए महान संबंध हैं ...

मैं, कुछ हद तक स्पष्ट करते रहे ताकि पता चलता है कि एन्क्रिप्ट नहीं किए गए WebSocket कनेक्शन मास्किंग एक आवश्यक आवश्यकता है, बल्कि सिर्फ लाभकारी से चाहते हैं :

प्रॉक्सी, राउटर और अन्य मध्यस्थ (एसएसपी आईएसपी) अक्सर किसी ग्राहक द्वारा भेजे गए अनुरोधों को पढ़ते हैं और किसी भी मुद्दे को "सही" करते हैं, हेडर जोड़ते हैं और अन्यथा "अनुकूलन" (जैसे कैश से प्रतिक्रिया) नेटवर्क संसाधन खपत को जोड़ते हैं।

कुछ शीर्षलेख और अनुरोध प्रकार (जैसे Connect) अक्सर अंतराल सर्वर के बजाय इन मध्यस्थों पर निर्देशित होते हैं।

चूंकि इनमें से कई डिवाइस पुराने हैं और Websockets प्रोटोकॉल से अनजान हैं, HTTP अनुरोध की तरह दिखने वाला स्पष्ट टेक्स्ट संपादित या कार्य किया जा सकता है।

इसलिए, यह आवश्यक था कि स्पष्ट पाठ को "प्रसंस्करण" के बजाय "पास से" शुरू करने के लिए अपरिचित बाइट्स में "स्थानांतरित" किया जाएगा।

इस बिंदु के बाद, यह सुनिश्चित करने के लिए हैकर्स दुर्भावनापूर्ण फ्रेम भेजने के लिए इस मास्किंग को "विपरीत" नहीं करता है, यह मास्किंग का लाभ उठाने के बारे में था।

मास्किंग के बजाय wss की आवश्यकता के लिए - मुझे पता है कि यह मानक के लेखन के दौरान माना जाता था ... लेकिन जब तक प्रमाणपत्र मुक्त नहीं होते हैं, तो यह किसी भी वेब मानक को एसएसएल/टीएलएस को "अमीर आदमी" मानक की आवश्यकता होती है एक इंटरनेट चौड़ा समाधान।

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

+0

प्रॉक्सी को अपग्रेड प्रोटोकॉल को समझने के लिए बदलने की आवश्यकता है, फिर भी प्रॉक्सी के लिए स्ट्रीम को आगे संसाधित नहीं करना भी मुश्किल होगा, जहां सर्वरों के लिए मास्किंग को लागू करना मुश्किल है और इसके चलते लागत हमेशा चल रही है क्योंकि डिबगिंग दर्द है। ग्राहकों * सभी * को इस जटिल प्रोटोकॉल का समर्थन करने के लिए अपग्रेड करने की आवश्यकता है। मुझे लगता है कि वास्तविक जवाब यह है कि यदि सर्वर में वेब प्रौद्योगिकियों को लागू करना कठिन होता है तो Google के पैमाने पर प्रतिस्पर्धात्मक लाभ होता है। यह बिल्कुल * आवश्यकता * नहीं है। – teknopaul

+0

@teknopaul, मैं आपकी भावना को समझता हूं। हालांकि, मुझे पूरा यकीन है कि यह सही नहीं है कि "प्रॉक्सी को अपग्रेड प्रोटोकॉल को समझने के लिए बदलने की जरूरत है" .... कई प्रॉक्सी के पास पास-फ़ॉलबैक अंतर्निहित था और जब तक "जैसा है" काम कर सकता था डेटा "उलझा हुआ" था (HTTP शीर्षलेख के रूप में पहचाना नहीं गया था)। पुराने प्रॉक्सीज़ में कोई समस्या थी क्योंकि 'कनेक्ट' हेडर (वे हेडर को आगे बढ़ाने में विफल रहे) के साथ, लेकिन यह सभी प्रॉक्सी नहीं है, मेरे ज्ञान के सर्वोत्तम होने के लिए, इस दिन कई प्रॉक्सी अपडेट नहीं किए गए थे और उनमें से कई (लेकिन सभी नहीं) Websocket उन्नयन के साथ ठीक काम करते हैं। – Myst

+0

@teknopaul - पीएस, मेमोरी कैश मिस के कारण unmaking एक परेशान संसाधन चिंता हो सकती है, लेकिन यह एक लूप में एक साधारण 4 बाइट एक्सओआर ऑपरेशन है ... यह वास्तव में लागू करने में काफी आसान है और अधिकांश भाषाओं में डेटा की आवश्यकता नहीं होती है कॉपी किया जाना चाहिए (मैंने रुबी के लिए एक पार्सर लिखा था, जिसने स्ट्रिंग प्रतियां उत्पन्न की थीं, लेकिन मेरा सी पार्सर लेखक के लिए आसान था और कोई प्रतिलिपि शामिल नहीं थी)। – Myst

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