पॉलीग्लॉट (कंप्यूटिंग)
अभिकलन में, बहुभाषी एक कंप्यूटर प्रोग्राम या स्क्रिप्ट (या अन्य फ़ाइल) है जो कई प्रोग्रामिंग भाषाओं या फ़ाइल संरुपो के मान्य रूप में लिखा जाता है।[1] यह नाम बहुभाषावाद के अनुरूप अंकित किया गया था। एक बहुभाषी फ़ाइल दो या दो से अधिक विभिन्न प्रारूपों की वाक्य रचना को मिलाकर बनाई जाती है।[2] जब फ़ाइल स्वरूपों को स्रोत कोड के रूप में संकलित या व्याख्यित किया जाता है, तो फ़ाइल को एक बहुभाषी प्रोग्राम कहा जा सकता है, हालांकि फ़ाइल प्रारूप और स्रोत कोड वाक्य रचना दोनों मूल रूप से बाइट्स की धाराएं हैं, और इस समानता का उपयोग बहुभाषी के विकास के लिए महत्वपूर्ण है।[3] बहुभाषी फ़ाइलों में तथा संगतता में व्यावहारिक अनुप्रयोग होते हैं,[4] लेकिन सत्यापन को बायपास करने या भेद्यता का फायदा उठाने के लिए उपयोग किए जाने पर सुरक्षा जोखिम भी हो सकता है।
इतिहास
कम से कम 1990 के दशक की शुरुआत से हैकर संस्कृति में बहुभाषी प्रोग्रामों को चुनौतियों और जिज्ञासाओं के रूप में तैयार किया गया है। एक उल्लेखनीय प्रारंभिक उदाहरण, जिसे केवल बहुभाषी
नाम दिया गया था, 1991 में यूज़नेट समूह rec.puzzles पर प्रकाशित किया गया था, जो 8 भाषाओं का समर्थन करता था, हालाँकि यह पहले के प्रोग्रामों से भी प्रेरित था।[5] 2000 में, एक बहुभाषी प्रोग्राम को अंतर्राष्ट्रीय ओबफुसेटेड सी कोड प्रतियोगिता में विजेता नामित किया गया था।[6]
21वीं सदी में, बहुभाषी प्रोग्राम और फ़ाइलों ने मैलवेयर के प्रसार के लिए एक गुप्त चैनल तंत्र के रूप में ध्यान आकर्षित किया।[3]
संरचना
एक बहुभाषी वाक्यविन्यास को दो या दो से अधिक विभिन्न प्रारूपों के संयोजन से बनाया जाता है, विभिन्न वाक्यविन्यास संरचनाों का लाभ उठाते हुए जो या तो प्रारूपों के बीच सामान्य होते हैं, या ऐसे संरचना जो भाषा विशिष्ट होते हैं लेकिन प्रत्येक भाषा में अलग-अलग अर्थ रखते हैं। एक फ़ाइल एक वैध बहुभाषी है यदि इसकी व्याख्या कई प्रोग्रामों द्वारा सफलतापूर्वक की जा सकती है। उदाहरण के लिए, एक पीडीएफ-ज़िप बहुभाषी को एक वैध पीडीएफ दस्तावेज़ के रूप में खोला जा सकता है और एक वैध ज़िप संग्रह के रूप में जिसका विसंपीडन किया जा सकता है। व्याख्या करने वाले प्रोग्रामों में वैधता बनाए रखने के लिए, इसके विपरीत किसी को यह सुनिश्चित करना चाहिए की एक दुभाषिया के लिए विशिष्ट संरचनाों की व्याख्या दूसरे द्वारा नहीं की जाती है।यह अक्सर भाषा-विशिष्ट संरचनाों को अन्य प्रारूप की टिप्पणियों या सादे पाठ के रूप में व्याख्या किए गए खंडों में छिपाकर पूरा किया जाता है।[1]
उदाहरण
सी, पीएचपी, और बैश
बहुभाषी प्रोग्राम के संरचना के लिए आमतौर पर उपयोग की जाने वाली दो तकनीकें उन भाषाओं का उपयोग करना है जो टिप्पणियों के लिए विभिन्न वर्णों का उपयोग करती हैं, और विभिन्न टोकन को विभिन्न भाषाओं में अन्य के रूप में फिर से परिभाषित करती है। इन्हें एएनएसआई सी, पीएचपी और बैश में लिखे गए इस सार्वजनिक क्षेत्र बहुभाषी में प्रदर्शित किया गया है,
#define a /*
#<?php
echo "\010Hello, world!\n";// 2> /dev/null > /dev/null \ ;
// 2> /dev/null; x=a;
$x=5; // 2> /dev/null \ ;
if (($x))
// 2> /dev/null; then
return 0;
// 2> /dev/null; fi
#define e ?>
#define b */
#include <stdio.h>
#define main() int main(void)
#define printf printf(
#define true )
#define function
function main()
{
printf "Hello, world!\n"true/* 2> /dev/null | grep -v true*/;
return 0;
}
#define c /*
main
#*/
निम्नलिखित पर ध्यान दें,
- हैश चिन्ह C में एक पूर्वसंसाधित्र वर्णन को चिह्नित करता है, लेकिन बैश और PHP दोनों में एक टिप्पणी है।
- // PHP और C दोनों में एक टिप्पणी है और बैश मेंमूल निर्देशिका है।
- शेल पुनर्निर्देशन का उपयोग अवांछित निर्गत को खत्म करने के लिए किया जाता है।
- हां तक कि टिप्पणी की गई पंक्तियों पर भी,
<?php
और?>
PHP संकेतक अभी भी प्रभावी हैं। - कथन
function main()
PHP और बैश दोनों में मान्य है, संकलन समय पर इसेint main(void)
में बदलने के लिए C #परिभाषा का उपयोग किया जाता है। - विभिन्न संचालन करने के लिए टिप्पणी संकेतकों को जोड़ा जा सकता है।
if (($x))
बैश और PHP दोनों में एक वैध कथन है।प्रिंटफ
एक बैशशेल निर्मित है जो कि कोष्ठक (यदि इसे C संकलक के साथ संकलित किया जाता है, तो इसे C प्रीप्रोसेसर जोड़ता है) को छोड़कर C प्रिंटफ के समान है।main
फ़ंक्शन को कॉल करने के लिए अंतिम तीन पंक्तियों का उपयोग केवल बैश द्वारा किया जाता है। PHP मेंmain
फ़ंक्शन परिभाषित है लेकिन कॉल नहीं किया गया है और C में स्पष्ट रूप से कॉल करने की कोई आवश्यकता नहीं हैmain
समारोह।
SNOBOL4, Win32Forth, PureBasicv4.x, और REBOL
निम्नलिखित को SNOBOL4,Win32Forth, PureBasicv4.x, और REBOL में एक साथ लिखा गया है,
*BUFFER : A.A ; .( Hello, world !) @ To Including?
Macro SkipThis; OUTPUT = Char(10) "Hello, World !"
;OneKeyInput Input('Char', 1, '[-f2-q1]') ; Char
End; SNOBOL4 + PureBASIC + Win32Forth + REBOL = <3
EndMacro: OpenConsole() : PrintN("Hello, world !")
Repeat : Until Inkey() : Macro SomeDummyMacroHere
REBOL [ Title: "'Hello, World !' in 4 languages"
CopyLeft: "Developed in 2010 by Society" ] Print
"Hello, world !" EndMacro: func [][] set-modes
system/ports/input [binary: true] Input set-modes
system/ports/input [binary: false] NOP:: EndMacro
; Wishing to refine it with new language ? Go on !
DOS बैच फ़ाइल और पर्ल
निम्न फ़ाइल DOS बैच फ़ाइल के रूप में चलती है, और फिर पर्ल में पुनः चलती है:
@rem = ' --PERL--
@echo off
perl "%~dpnx0" %*
goto endofperl
@rem ';
#!perl
print "Hello, world!\n";
__END__
:endofperl
यह पर्ल स्क्रिप्ट बनाने की अनुमति देता है जिसे न्यूनतम प्रयास के साथ DOS प्रणाली पर चलाया जा सकता है। ध्यान दें कि किसी फ़ाइल के लिए अलग-अलग दुभाषियों में बिल्कुल समान कार्य करने की कोई आवश्यकता नहीं है।
प्रकार
बहुभाषी प्रकारों में सम्मिलित हैं,[3]
- स्टैक, जहां कई फ़ाइलें एक-दूसरे से जुड़ी होती हैं
- पैरासाइट जहां प्राथमिक फ़ाइल प्रारूप में टिप्पणी फ़ील्ड के भीतर एक द्वितीयक फ़ाइल प्रारूप छिपा होता है
- ज़िपर जहां दो फ़ाइलें एक-दूसरे की टिप्पणियों के भीतर परस्पर व्यवस्थित होती हैं
- गुहाएँ, जहाँ एक द्वितीयक फ़ाइल स्वरूप प्राथमिक फ़ाइल के शून्य-पैडेड क्षेत्रों के भीतर छिपा होता है।
लाभ
बहुभाषी मार्कअप
बहुभाषी मार्कअप को HTML5 और XHTML के लाभों के उपयोगी संयोजन के रूप में प्रस्तावित किया गया है।[7] दोनों ही तरह से समान DOM संरचना तैयार करने के लिए, ऐसे दस्तावेज़ों को HTML (जो SGML-संगत है) या XML के रूप में पार्स किया जा सकता है। उदाहरण के लिए, इन मानदंडों को पूरा करने के लिए HTML5 दस्तावेज़ के लिए, दो आवश्यकताएं यह हैं कि इसमें HTML5 सिद्धांत होना चाहिए, और अच्छी तरह से निर्मित XHTML में लिखा जाना चाहिए। ब्राउज़र समर्थन और MIME प्रकार के आधार पर, उसी दस्तावेज़ को HTML या XHTML के रूप में प्रस्तुत किया जा सकता है।
जैसा कि html-बहुभाषी विशेषता द्वारा व्यक्त किया गया है,[7] इसलिए एक बहुभाषी HTML5 दस्तावेज़ लिखने के लिए, निम्नलिखित मुख्य बिंदुओं का पालन किया जाना चाहिए,
- प्रसंस्करण निर्देश और XML घोषणा दोनों बहुभाषी मार्कअप में निषिद्ध हैं
- किसी दस्तावेज़ की वर्ण कूटलेखन निर्दिष्ट करना
- सिद्धांत
- नेमस्पेस
- अवयव वाक्य रचना (अर्थात अंतिम टैग वैकल्पिक नहीं हैं। शून्य अवयवो के लिए स्व-समापन टैग का उपयोग करें।)
- अवयव सामग्री
- टेक्स्ट (यानी प्री और पाठ क्षेत्र न्यूलाइन अक्षर से शुरू नहीं होना चाहिए)
- विशेषताएँ (अर्थात मान उद्धृत किया जाना चाहिए)
- नामित इकाई संदर्भ (अर्थात् केवल amp, lt, gt, apos, quot)
- टिप्पणियाँ (अर्थात का उपयोग करें)
- बहुभाषी मार्कअप की लिपिन्यास और बनावट
इसलिए सबसे मूलभूत संभावित बहुभाषी मार्कअप दस्तावेज़ इस तरह दिखेगा,[7]
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<title>The title element must not be empty.</title>
</head>
<body>
</body>
</html>
बहुभाषी मार्कअप दस्तावेज़ में गैर-शून्य अवयव (जैसे script
, p
, div
) खाली होने पर भी स्व-समापन नहीं हो सकता, क्योंकि यह मान्य HTML नहीं है।[8] उदाहरण के लिए, किसी पृष्ठ पर एक खाली पाठ क्षेत्र जोड़ने के लिए, कोई<पाठ क्षेत्र/>
का उपयोग नहीं कर सकता है, बल्कि इसके बजाय <पाठ क्षेत्र></पाठ क्षेत्र>
का उपयोग कर सकता है।
रचना प्रारूप
DICOM चिकित्सीय प्रतिबिंबन प्रारूप को TIFF फ़ाइलों के साथ बहुभाषीय की अनुमति देने के लिए प्रारूप किया गया था, जिससे फ़ाइल में समान प्रतिबिंब डेटा के कुशल भंडारण की अनुमति मिलती है जिसकी व्याख्या DICOM या TIFF दर्शकों द्वारा की जा सकती है।[9]
संगतता
पायथन 2 और पायथन 3 प्रोग्रामिंग भाषाओं को एक-दूसरे के साथ संगत होने के लिए प्रारूप नहीं किया गया था, लेकिन वाक्य रचना की पर्याप्त समानता है कि दोनों संस्करणों में चलने की तुलना में एक बहुभाषी पायथन प्रोग्राम लिखा जा सकता है।[10]
सुरक्षा निहितार्थ
दो प्रारूपों का एक बहुभाषाविद स्पष्ट रूप से सौम्य और व्यापक रूप से स्वीकृत आवरण के भीतर स्टेग्नोग्राफ़िक रूप से एक दुर्भावनापूर्ण पेलोड बना सकता है, जैसे कि JPEG फ़ाइल जो अपने टिप्पणी क्षेत्र में यादृच्छिक डेटा की अनुमति देती है। फिर एक कमजोर जेपीईजी रेंडरर को पेलोड निष्पादित करने, हमलावर को नियंत्रित चलाने के लिए मजबूर किया जा सकता है। व्याख्या करने वाला प्रोग्राम क्या अपेक्षा करता है और फ़ाइल में वास्तव में क्या है, उसके बीच बेमेल, भेद्यता का मूल कारण है।[1]
एसक्यूएल अंतःक्षेपण बहुभाषी का एक साधारण रूप है, जहां एक सर्वर एक निश्चित बाधा के अनुरूप उपयोगकर्ता-नियंत्रित निविष्ट की अपेक्षा करता है, लेकिन उपयोगकर्ता वाक्य रचना की आपूर्ति करता है जिसकी व्याख्या एसक्यूएल कोड के रूप में की जाती है।
ध्यान दें कि सुरक्षा संदर्भ में, बहुभाषी फ़ाइल के कई प्रारूपों में सख्ती से मान्य होने की कोई आवश्यकता नहीं है, यह फ़ाइल के प्राथमिक दुभाषिया द्वारा व्याख्या किए जाने पर अनपेक्षित व्यवहार को ट्रिगर करने के लिए पर्याप्त है।
अत्यधिक लचीले या विस्तरणीय फ़ाइल स्वरूपों में बहुभाषीय के लिए अधिक गुंजाइश होती है, और इसलिए अधिक सख्ती से बाधित व्याख्या बहुभाषी तकनीकों का उपयोग करके हमलों के खिलाफ कुछ शमन प्रदान करती है। उदाहरण के लिए, पीडीएफ फ़ाइल प्रारूप के लिए आवश्यक है कि जादुई संख्या %PDF
बाइट ऑफसेट शून्य पर दिखाई देता है, लेकिन कई पीडीएफ दुभाषिए इस बाधा को हटा देते हैं और फ़ाइल को वैध पीडीएफ के रूप में स्वीकार करते हैं जब तक कि स्ट्रिंग पहले 1024 बाइट्स के भीतर दिखाई देती है। यह बहुभाषी पीडीएफ फाइलों के लिए फ़ाइल के हेडर में गैर-पीडीएफ सामग्री की तस्करी के लिए अवसर की एक विंडो बनाता है।[3] पीडीएफ प्रारूप को "विविध और अस्पष्ट" के रूप में वर्णित किया गया है, और विभिन्न पीडीएफ पार्सिंग इंजनों के बीच महत्वपूर्ण रूप से भिन्न व्यवहार के कारण, एक पीडीएफ-पीडीएफ बहुभाषी बनाना संभव है जो दो अलग-अलग पीडीएफ पाठकों में दो पूरी तरह से अलग दस्तावेजों के रूप में प्रस्तुत होता है।[11]
बहुभाषी फ़ाइलों के भीतर छिपे मैलवेयर का पता लगाने के लिए फ़ाइल-प्रकार की पहचान उपयोगिताओं जैसे फ़ाइल पर भरोसा करने की तुलना में अधिक परिष्कृत विश्लेषण की आवश्यकता होती है। 2019 में, वाणिज्यिक एंटी-मैलवेयर सॉफ़्टवेयर के मूल्यांकन से पता चला कि ऐसे कई पैकेज परीक्षण के तहत किसी भी बहुभाषी मैलवेयर का पता लगाने में असमर्थ थे।[3][2]
2019 में, PE-DICOM बहुभाषी तकनीक का उपयोग करके DICOM चिकित्सीय प्रतिबिंबन फ़ाइल प्रारूप को मैलवेयर अंतःक्षेपण के प्रति संवेदनशील पाया गया था।[12] हमले की बहुभाषी प्रकृति, विनियामक विचारों के साथ मिलकर, कीटाणुशोधन जटिलताओं को जन्म देती है, क्योंकि मैलवेयर अनिवार्य रूप से वैध प्रतिबिंबन फ़ाइलों से जुड़ा हुआ है, घटना प्रतिक्रिया टीम और A/V सॉफ़्टवेयर मैलवेयर फ़ाइल को हटा नहीं सकते हैं क्योंकि इसमें संरक्षित रोगी स्वास्थ्य जानकारी सम्मिलित है।[13]
GIFAR हमला
ग्राफिक्स विनिमय प्रारूप जावा आर्काइव्स (जीआईएफएआर) एक बहुभाषी फाइल है जो जीआईएफ और जेएआर फाइल प्रारूप में एक साथ होती है।[14] इस तकनीक का उपयोग सुरक्षा कमजोरियों का फायदा उठाने के लिए किया जा सकता है, उदाहरण के लिए किसी वेबसाइट पर GIFAR अपलोड करना जो प्रतिबिंब अपलोड करने की अनुमति देता है (क्योंकि यह एक वैध GIF फ़ाइल है), और फिर GIFAR के जावा हिस्से को इस तरह निष्पादित किया गया जैसे कि यह वेबसाइट के इच्छित कोड का हिस्सा था, जिसे उसी मूल से ब्राउज़र पर वितरित किया जा रहा था।[15] दिसंबर 2008 में प्रकाशित सीवीई के साथ जावा को जेआरई 6 अपडेट 11 में पैच किया गया था।[16][17]
GIFAR संभव हैं क्योंकि GIF प्रतिबिंबयां फ़ाइल की शुरुआत में अपना हेडर संग्रहीत करती हैं, और JAR फ़ाइलें (किसी भी ज़िप संग्रह-आधारित प्रारूप की तरह) अपना डेटा अंत में संग्रहीत करती हैं।[18]
संबंधित शब्दावली
- बहुभाषी प्रोग्रामिंग, कई प्रोग्रामिंग भाषाओं का उपयोग करके प्रणाली बनाने के अभ्यास का संदर्भ देती है, लेकिन जरूरी नहीं कि एक ही फाइल में हो।[19][20]
- बहुभाषी दृढ़ता समान है, लेकिन डेटाबेस के बारे में समान नही है।
यह भी देखें
संदर्भ
- ↑ 1.0 1.1 1.2 Jonas Magazinius; Billy K. Rios; Andrei Sabelfeld (2013-11-04). "Polyglots: crossing origins by crossing formats". Proceedings of the 2013 ACM SIGSAC Conference on Computer & Communications Security: 753–764. doi:10.1145/2508859.2516685. ISBN 9781450324779. S2CID 16516484.
- ↑ 2.0 2.1 Bridges, Robert A.; Oesch, Sean; Verma, Miki E.; Iannacone, Michael D.; Huffer, Kelly M. T.; Jewell, Brian; Nichols, Jeff A.; Weber, Brian; Beaver, Justin M.; Smith, Jared M.; Scofield, Daniel; Miles, Craig; Plummer, Thomas; Daniell, Mark; Tall, Anne M. (2023). "Beyond the Hype: An Evaluation of Commercially Available Machine-Learning-Based Malware Detectors". Digital Threats: Research and Practice. arXiv:2012.09214. doi:10.1145/3567432. S2CID 247218744.
- ↑ 3.0 3.1 3.2 3.3 3.4 Koch, Luke; Oesch, Sean; Adkisson, Mary; Erwin, Sam; Weber, Brian; Chaulagain, Amul (2022). "पॉलीग्लॉट फ़ाइलों का पता लगाने की दिशा में". arXiv:2203.07561 [cs.CR].
- ↑ "Benefits of polyglot XHTML5". Retrieved 4 September 2022.
- ↑ "Polyglot: A program in eight languages". Retrieved 6 September 2022.
- ↑ "15th International Obfuscated C Code Contest (2000)". Retrieved 6 September 2022.
- ↑ 7.0 7.1 7.2 "Polyglot Markup: A robust profile of the HTML5 vocabulary". Retrieved 4 September 2022.
- ↑ Polyglot Markup: HTML-Compatible XHTML Documents: 6.4 Void Elements Archived 2 October 2012 at the Wayback Machine. W3C Editor's Draft 9 July 2012.
- ↑ "DICOM-TIFF दोहरी व्यक्तित्व फ़ाइलें". Retrieved 5 September 2022.
- ↑ Schofield, Ed. "Cheat Sheet: Writing Python 2-3 compatible code". Retrieved 6 September 2022.
- ↑ Wolf, Julia (9 February 2011). "ओएमजी डब्ल्यूटीएफ पीडीएफ". 27th Chaos Communication Congress. Retrieved 6 September 2022.
- ↑ Desjardins, Benoit; Mirsky, Yisroel; Ortiz, Markel Picado; Glozman, Zeev; Tarbox, Lawrence; Horn, Robert; Horii, Steven C. (April 2020). "DICOM Images Have Been Hacked! Now What?". American Journal of Roentgenology. 214 (4): 727–735. doi:10.2214/AJR.19.21958. PMID 31770023. S2CID 208318324. Retrieved 5 September 2022.
- ↑ "सर्वव्यापी बग HIPAA-संरक्षित मैलवेयर को मेडिकल छवियों के पीछे छिपने की अनुमति देता है". Retrieved 5 September 2022.
- ↑ Byrd, Christopher. "GIFAR कैसे बनाएं". Retrieved 6 March 2023.
- ↑ Eckel, Benjamin. "GIFAR छवि भेद्यता". Hackaday. Retrieved 6 March 2023.
- ↑ "CVE-2008-5343". cve.mitre.org. 2008-12-04. Retrieved 20 April 2021.
- ↑ McMillan, Robert (August 1, 2008). "एक फोटो जो आपकी ऑनलाइन साख चुरा सकती है". Infoworld.com. Archived from the original on 2020-09-18.
- ↑ Rios, Billy (2008-12-17). "Billy (BK) Rios » SUN Fixes GIFARs". Archived from the original on 14 March 2016. Retrieved 20 April 2021.
- ↑ Fjeldberg, Hans (2008). पॉलीग्लॉट प्रोग्रामिंग - एक व्यावसायिक परिप्रेक्ष्य (PDF) (M.Sc). Norwegian University of Science and Technology.
- ↑ Gupta, Tripta (2018-12-19). "पॉलीग्लॉट माइक्रोसर्विसेज का विश्लेषण". Medium (in English). Retrieved 2019-08-05.
बाहरी संबंध
- 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