
Given JSON-like content, The JSON Sanitizer converts it to valid JSON.
JSON‑जैसी सामग्री को देखते हुए, JSON Sanitizer इसे मान्य JSON में परिवर्तित करता है।
इसे डेटा-पाइपलाइन के किसी भी सिरे पर जोड़ा जा सकता है ताकि पोस्टेल के सिद्धांत को संतुष्ट करने में मदद मिल सके:
जो आप करते हैं उसमें रूढ़िवादी बनें, दूसरों से जो स्वीकार करते हैं उसमें उदार बनें
दूसरों से JSON‑जैसी सामग्री पर लागू करने पर, यह सुगठित JSON उत्पन्न करेगा जो आपके द्वारा उपयोग किए जाने वाले किसी भी पार्सर को संतुष्ट करना चाहिए।
अपने आउटपुट को भेजने से पहले लागू करने पर, यह एन्कोडिंग में छोटी गलतियों को सुधारता है और आपके JSON को HTML और XML में एम्बेड करना आसान बनाता है।

कई अनुप्रयोगों में बड़ी मात्रा में कोड होता है जो JSON आउटपुट उत्पन्न करने के लिए तदर्थ विधियों का उपयोग करता है।
अक्सर ये आउटपुट नेटवर्क पर भेजे जाने से पहले थोड़ी मात्रा में फ्रेमवर्क कोड से गुज़रते हैं। फ्रेमवर्क कोड की यह छोटी मात्रा इस लाइब्रेरी का उपयोग यह सुनिश्चित करने के लिए कर सकती है कि तदर्थ आउटपुट मानकों के अनुरूप हैं और Javascript के eval ऑपरेटर जैसे (अत्यधिक) शक्तिशाली डिसीरियलाइज़रों को पास करने के लिए सुरक्षित हैं।
अनुप्रयोगों में अक्सर वेब सेवा API भी होते हैं जो विभिन्न स्रोतों से JSON प्राप्त करते हैं। जब यह JSON तदर्थ विधियों का उपयोग करके बनाया जाता है, तो यह लाइब्रेरी इसे एक ऐसे रूप में ढाल सकती है जिसे पार्स करना आसान हो।
इस लाइब्रेरी को अनुरोध और प्रतिक्रिया भेजने और प्राप्त करने वाले कोड में जोड़कर, यह लाइब्रेरी सॉफ्टवेयर आर्किटेक्ट्स को सिस्टम-व्यापी सुरक्षा और सुगठितता की गारंटी सुनिश्चित करने में मदद कर सकती है।
सैनिटाइज़र JSON‑जैसी सामग्री लेता है, और उसी तरह व्याख्या करता है जैसे JS eval करेगा। विशेष रूप से, यह इन गैर-मानक निर्माणों से निपटता है।
सैनिटाइज़र लुप्त विराम चिह्न, अंतिम उद्धरण, और बेमेल या लुप्त बंद कोष्ठकों को ठीक करता है। यदि इनपुट में केवल सफेद स्थान है तो मान्य JSON स्ट्रिंग null प्रतिस्थापित कर दी जाती है।
आउटपुट RFC 4627 द्वारा परिभाषित सुगठित JSON है। आउटपुट इन अतिरिक्त गुणों को संतुष्ट करता है:
"<script", "</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 शैली की पंक्ति और ब्लॉक टिप्पणियाँ हटा दी जाती हैं। |
(...) | समूहीकरण कोष्ठक हटा दिए जाते हैं। |