पॉलीग्लॉट (कंप्यूटिंग)

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

इतिहास
कम से कम 1990 के दशक की शुरुआत से हैकर संस्कृति में बहुभाषी कार्यक्रमों को चुनौतियों और जिज्ञासाओं के रूप में तैयार किया गया है। एक उल्लेखनीय प्रारंभिक उदाहरण, जिसे सरलता से नाम दिया गया है  1991 में यूज़नेट समूह rec.puzzles पर प्रकाशित किया गया था, जो 8 भाषाओं का समर्थन करता था, हालाँकि यह पहले के कार्यक्रमों से भी प्रेरित था। 2000 में, एक बहुभाषी कार्यक्रम को अंतर्राष्ट्रीय ओबफुसेटेड सी कोड प्रतियोगिता में विजेता नामित किया गया था।

21वीं सदी में, बहुभाषी प्रोग्राम और फ़ाइलों ने मैलवेयर के प्रसार के लिए एक गुप्त चैनल तंत्र के रूप में ध्यान आकर्षित किया।

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

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

SNOBOL4, Win32Forth, PureBasicv4.x, और REBOL
निम्नलिखित को SNOBOL4, Forth (प्रोग्रामिंग भाषा), PureBasicv4.x, और REBOL में एक साथ लिखा गया है:

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

प्रकार
बहुभाषी प्रकारों में शामिल हैं:


 * स्टैक, जहां कई फ़ाइलें एक-दूसरे से जुड़ी होती हैं
 * परजीवी जहां प्राथमिक फ़ाइल प्रारूप में टिप्पणी फ़ील्ड के भीतर एक द्वितीयक फ़ाइल प्रारूप छिपा होता है
 * ज़िपर जहां दो फ़ाइलें एक-दूसरे की टिप्पणियों के भीतर परस्पर व्यवस्थित होती हैं
 * गुहाएँ, जहाँ एक द्वितीयक फ़ाइल स्वरूप प्राथमिक फ़ाइल के शून्य-गद्देदार क्षेत्रों के भीतर छिपा होता है।

बहुभाषी मार्कअप
बहुभाषी मार्कअप को HTML5 और XHTML के लाभों के उपयोगी संयोजन के रूप में प्रस्तावित किया गया है। ऐसे दस्तावेज़ों को HTML (जो SGML-संगत है) या XML के रूप में पार्स किया जा सकता है, और दोनों ही तरह से समान दस्तावेज़ ऑब्जेक्ट मॉडल संरचना तैयार करेंगे। उदाहरण के लिए, किसी HTML5 दस्तावेज़ के लिए इन मानदंडों को पूरा करने के लिए, दो आवश्यकताएं यह हैं कि इसमें HTML5 दस्तावेज़ प्रकार की घोषणा होनी चाहिए, और अच्छी तरह से निर्मित XHTML में लिखा जाना चाहिए। ब्राउज़र समर्थन और MIME प्रकार के आधार पर, उसी दस्तावेज़ को HTML या XHTML के रूप में प्रस्तुत किया जा सकता है।

जैसा कि html-बहुभाषी अनुशंसा द्वारा व्यक्त किया गया है, बहुभाषी HTML5 दस्तावेज़ लिखने के लिए, निम्नलिखित मुख्य बिंदुओं का पालन किया जाना चाहिए:


 * 1) प्रसंस्करण निर्देश और XML घोषणा दोनों बहुभाषी मार्कअप में निषिद्ध हैं
 * 2) दस्तावेज़ के वर्ण एन्कोडिंग को निर्दिष्ट करना
 * 3) सिद्धांत
 * 4) नामस्थान
 * 5) एलिमेंट सिंटैक्स (यानी अंतिम टैग वैकल्पिक नहीं हैं। शून्य तत्वों के लिए स्व-समापन टैग का उपयोग करें।)
 * 6) तत्व सामग्री
 * 7) टेक्स्ट (यानी प्री और टेक्स्टएरिया न्यूलाइन कैरेक्टर से शुरू नहीं होना चाहिए)
 * 8) विशेषताएँ (अर्थात मान उद्धृत किया जाना चाहिए)
 * 9) नामित इकाई संदर्भ (अर्थात् केवल amp, lt, gt, apos, quot)
 * 10) टिप्पणियाँ (अर्थात  का प्रयोग करें)
 * 11) बहुभाषी मार्कअप की स्क्रिप्टिंग और स्टाइलिंग

इसलिए सबसे बुनियादी संभावित बहुभाषी मार्कअप दस्तावेज़ इस तरह दिखेगा: बहुभाषी मार्कअप दस्तावेज़ में गैर-शून्य तत्व (जैसे,  ,  ) खाली होने पर भी स्व-समापन नहीं हो सकता, क्योंकि यह मान्य HTML नहीं है। उदाहरण के लिए, किसी पृष्ठ पर खाली टेक्स्ट क्षेत्र जोड़ने के लिए, कोई इसका उपयोग नहीं कर सकता है  , लेकिन उपयोग करना होगा   बजाय।

रचना प्रारूप
DICOM मेडिकल इमेजिंग प्रारूप को TIFF फ़ाइलों के साथ बहुभाषीिंग की अनुमति देने के लिए डिज़ाइन किया गया था, जिससे फ़ाइल में समान छवि डेटा के कुशल भंडारण की अनुमति मिलती है जिसे DICOM या TIFF दर्शकों द्वारा व्याख्या किया जा सकता है।

संगतता
हिस्ट्री_ऑफ_पायथन#वर्जन_2 और हिस्ट्री_ऑफ_पायथन#वर्जन_3 प्रोग्रामिंग भाषाओं को एक-दूसरे के साथ संगत होने के लिए डिज़ाइन नहीं किया गया था, लेकिन सिंटैक्स की पर्याप्त समानता है कि दोनों संस्करणों में चलने की तुलना में एक बहुभाषी पायथन प्रोग्राम लिखा जा सकता है।

सुरक्षा निहितार्थ
दो प्रारूपों का एक बहुभाषाविद स्पष्ट रूप से सौम्य और व्यापक रूप से स्वीकृत आवरण के भीतर स्टेग्नोग्राफ़िक रूप से एक दुर्भावनापूर्ण पेलोड बना सकता है प्रारूप, जैसे कि JPEG फ़ाइल जो अपने टिप्पणी क्षेत्र में मनमाना डेटा की अनुमति देती है। फिर एक कमजोर जेपीईजी रेंडरर को पेलोड निष्पादित करने, हमलावर को नियंत्रण सौंपने के लिए मजबूर किया जा सकता है। व्याख्या करने वाला प्रोग्राम क्या अपेक्षा करता है और फ़ाइल में वास्तव में क्या है, के बीच बेमेल, भेद्यता का मूल कारण है।

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

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

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

2019 में, DICOM मेडिकल इमेजिंग फ़ाइल प्रारूप को पोर्टेबल निष्पादन योग्य बहुभाषी तकनीक का उपयोग करके मैलवेयर इंजेक्शन के प्रति संवेदनशील पाया गया था। हमले की बहुभाषी प्रकृति, विनियामक विचारों के साथ मिलकर, कीटाणुशोधन जटिलताओं को जन्म देती है: क्योंकि मैलवेयर अनिवार्य रूप से वैध इमेजिंग फ़ाइलों से जुड़ा हुआ है, घटना प्रतिक्रिया टीम और ए/वी सॉफ़्टवेयर मैलवेयर फ़ाइल को हटा नहीं सकते हैं क्योंकि इसमें संरक्षित रोगी स्वास्थ्य जानकारी शामिल है।

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

संबंधित शब्दावली

 * बहुभाषी प्रोग्रामिंग, कई प्रोग्रामिंग भाषाओं का उपयोग करके प्रणाली बनाने के अभ्यास का संदर्भ देती है, लेकिन जरूरी नहीं कि एक ही फाइल में हो।
 * बहुभाषी दृढ़ता समान है, लेकिन डेटाबेस के बारे में समान नही है।

यह भी देखें

 * क्विन (अभिकलन)

बाहरी संबंध

 * CSE HTML Validator for Windows with polyglot markup support
 * Benefits of polyglot XHTML5
 * A polyglot in 402 different languages
 * A polyglot in 16 different languages
 * A polyglot in 8 different languages (written in COBOL, Pascal, Fortran, C, PostScript, Unix shell, Intel x86 machine language and Perl 5)
 * A polyglot in 7 different languages (written in C, Pascal, PostScript, TeX, Bash, Perl and Befunge98)
 * A polyglot in 6 different languages (written in Perl, C, Unix shell, Brainfuck, Whitespace and Befunge)
 * List of generic polyglots
 * A PDF-MP3 polyglot, being a PDF document which is also an MP3 audio version of its content
 * PoC||GTFO, a security publication published as polyglot PDF documents