
एक Java लाइब्रेरी जो गलत JSON-जैसी सामग्री को मानक-अनुरूप, सुरक्षित JSON में रूपांतरित करती है, कोड इंजेक्शन को रोकती है और HTML/XML संदर्भों में एम्बेडेबिलिटी सुनिश्चित करती है।
JSON जैसी सामग्री को देखते हुए, JSON Sanitizer इसे मान्य JSON में परिवर्तित करता है।
इसे डेटा-पाइपलाइन के किसी भी छोर पर जोड़ा जा सकता है ताकि पोस्टल के सिद्धांत को संतुष्ट करने में मदद मिल सके:
जो आप करते हैं उसमें रूढ़िवादी बनें, जो आप दूसरों से स्वीकार करते हैं उसमें उदार बनें।
दूसरों से JSON जैसी सामग्री पर लागू करने पर, यह अच्छी तरह से गठित JSON उत्पन्न करेगा जो आपके उपयोग किए जाने वाले किसी भी पार्सर को संतुष्ट करेगा।
आपके आउटपुट पर भेजने से पहले लागू करने पर, यह एन्कोडिंग में छोटी गलतियों को ठीक करेगा और आपके JSON को HTML और XML में एम्बेड करना आसान बनाएगा।

कई अनुप्रयोगों में बड़ी मात्रा में कोड होता है जो JSON आउटपुट उत्पन्न करने के लिए तदर्थ विधियों का उपयोग करता है।
अक्सर ये सभी आउटपुट नेटवर्क पर भेजे जाने से पहले थोड़ी मात्रा में फ्रेमवर्क कोड से गुज़रते हैं। फ्रेमवर्क कोड की यह छोटी मात्रा यह सुनिश्चित करने के लिए इस लाइब्रेरी का उपयोग कर सकती है कि तदर्थ आउटपुट मानकों के अनुरूप हैं और जावास्क्रिप्ट के eval ऑपरेटर जैसे (अत्यधिक) शक्तिशाली डीसीरियलाइज़र को पास करने के लिए सुरक्षित हैं।
एप्लिकेशन में अक्सर वेब सेवा API होते हैं जो विभिन्न स्रोतों से JSON प्राप्त करते हैं। जब यह JSON तदर्थ विधियों का उपयोग करके बनाया जाता है, तो यह लाइब्रेरी इसे पार्स करने में आसान रूप में बदल सकती है।
इस लाइब्रेरी को अनुरोध और प्रतिक्रिया भेजने और प्राप्त करने वाले कोड में जोड़कर, यह लाइब्रेरी सॉफ्टवेयर आर्किटेक्ट्स को सिस्टम-व्यापी सुरक्षा और सुगठितता गारंटी सुनिश्चित करने में मदद कर सकती है।
सैनिटाइज़र JSON जैसी सामग्री लेता है, और इसकी व्याख्या JS eval के रूप में करता है। विशेष रूप से, यह इन गैर-मानक निर्माणों से निपटता है।
सैनिटाइज़र लापता विराम चिह्न, अंत उद्धरण, और बेमेल या लापता समापन कोष्ठक को ठीक करता है। यदि इनपुट में केवल व्हाइट-स्पेस है तो मान्य JSON स्ट्रिंग null को प्रतिस्थापित किया जाता है।
आउटपुट RFC 4627 द्वारा परिभाषित अच्छी तरह से गठित JSON है। आउटपुट इन अतिरिक्त गुणों को संतुष्ट करता है:
"</script" शामिल नहीं होगी, इसलिए इसे आगे एन्कोडिंग के बिना HTML स्क्रिप्ट तत्व के अंदर एम्बेड किया जा सकता है।"]]>" शामिल नहीं होगी, इसलिए इसे आगे एन्कोडिंग के बिना XML CDATA अनुभाग के अंदर एम्बेड किया जा सकता है।eval बिल्ट-इन (कोष्ठक में लपेटने के बाद) या JSON.parse द्वारा पार्स किया जा सकता है। विशेष रूप से, आउटपुट में एम्बेडेड JS न्यूलाइन (U+2028 पैराग्राफ सेपरेटर या U+2029 लाइन सेपरेटर) के साथ कोई स्ट्रिंग शाब्दिक नहीं होगा।चूंकि आउटपुट अच्छी तरह से गठित JSON है, इसे eval में पास करने से कोई दुष्प्रभाव और कोई मुक्त चर नहीं होगा, इसलिए यह न तो कोड-इंजेक्शन वेक्टर है और न ही रहस्यों के बहिर्निकासन के लिए वेक्टर है।
यह लाइब्रेरी केवल यह सुनिश्चित करती है कि JSON स्ट्रिंग → Javascript ऑब्जेक्ट चरण का कोई दुष्प्रभाव न हो और कोई मुक्त चर हल न करे, और यह नियंत्रित नहीं कर सकती कि अन्य क्लाइंट-साइड कोड बाद में परिणामी Javascript ऑब्जेक्ट की व्याख्या कैसे करता है। इसलिए यदि क्लाइंट-साइड कोड पार्स किए गए डेटा का एक हिस्सा लेता है जो एक हमलावर द्वारा नियंत्रित है और इसे eval या innerHTML जैसे शक्तिशाली इंटरप्रेटर के माध्यम से वापस भेजता है, तो उस क्लाइंट-साइड कोड को अनपेक्षित दुष्प्रभाव हो सकते हैं।
var myValue = eval(sanitizedJsonString); // safe
var myEmbeddedValue = eval(myValue.foo); // possibly unsafe
इसके अलावा, JSON को सैनिटाइज़ करना किसी एप्लिकेशन को Confused Deputy हमलों से नहीं बचा सकता है।
var myValue = JSON.parse(sanitizedJsonString);
addToAdminstratorsGroup(myValue.propertyFromUntrustedSource);
सैनिटाइज़ विधि इनपुट स्ट्रिंग को बिना नया बफर आवंटित किए लौटाएगी जब इनपुट पहले से ही मान्य JSON है जो उपरोक्त गुणों को संतुष्ट करता है। इस प्रकार, यदि आमतौर पर अच्छी तरह से गठित इनपुट पर उपयोग किया जाता है, तो इसका न्यूनतम मेमोरी ओवरहेड होता है।
सैनिटाइज़ विधि O(n) समय लेती है जहाँ n UTF-16 कोड-यूनिट में इनपुट की लंबाई है।
| निर्माण | नीति |
|---|
'...' | एकल उद्धरण वाले स्ट्रिंग्स को JSON स्ट्रिंग्स में बदल दिया जाता है। |
\xAB | हेक्स एस्केप को JSON यूनिकोड एस्केप में बदल दिया जाता है। |
\012 | ऑक्टल एस्केप को JSON यूनिकोड एस्केप में बदल दिया जाता है। |
0xAB | हेक्स पूर्णांक शाब्दिक को JSON दशमलव संख्याओं में बदल दिया जाता है। |
012 | ऑक्टल पूर्णांक शाब्दिक को JSON दशमलव संख्याओं में बदल दिया जाता है। |
+.5 | दशमलव संख्याओं को JSON के सख्त प्रारूप में बदल दिया जाता है। |
[0,,2] | सरणियों में एलिज़न को null से भर दिया जाता है। |
[1,2,3,] | अंतिम अल्पविराम हटा दिए जाते हैं। |
{foo:"bar"} | अनकोटेड प्रॉपर्टी नामों को कोट किया जाता है। |
//comments | JS शैली की लाइन और ब्लॉक टिप्पणियां हटा दी जाती हैं। |
(...) | समूहीकरण कोष्ठक हटा दिए जाते हैं। |