
مكتبة جافا تحول المحتوى المشابه لـ JSON التالف إلى JSON آمن ومتوافق مع المعايير، مما يمنع حقن الكود ويضمن قابلية التضمين في سياقات HTML/XML.
بما أنّ المحتوى شبيه بـ JSON، فإن مُنقّي JSON يحوّله إلى JSON صالح.
يمكن إرفاق هذه المكتبة في أيّ من طرفي خط أنابيب البيانات للمساعدة في تحقيق مبدأ بوستل:
كن محافظًا فيما تفعله، وكن متسامحًا فيما تقبله من الآخرين
عند تطبيقه على محتوى شبيه بـ JSON من الآخرين، سينتج JSON جيد التكوين يرضي أي محلّل تستخدمه.
وعند تطبيقه على مخرجاتك قبل إرسالها، فإنه يصحّح أخطاء الترميز البسيطة ويسهّل تضمين JSON في HTML وXML.

العديد من التطبيقات لديها كميات كبيرة من التعليمات البرمجية التي تستخدم طرقًا مرتجلة لتوليد مخرجات JSON.
غالبًا ما تمر هذه المخرجات عبر قدر صغير من كود الإطار قبل إرسالها عبر الشبكة. يمكن لهذا القدر الصغير من كود الإطار استخدام هذه المكتبة للتأكد من أن المخرجات المرتجلة متوافقة مع المعايير وآمنة لتمريرها إلى أدوات إلغاء التسلسل (القوية) مثل عامل eval في Javascript.
كذلك، غالبًا ما تمتلك التطبيقات واجهات برمجة تطبيقات ويب تستقبل JSON من مصادر متنوعة. عندما يُنشأ هذا JSON باستخدام طرق مرتجلة، يمكن لهذه المكتبة معالجته إلى شكل يسهل تحليله.
من خلال ربط هذه المكتبة بالكود الذي يرسل ويستقبل الطلبات والاستجابات، يمكن لهذه المكتبة مساعدة مهندسي البرمجيات في ضمان أمان على مستوى النظام وضمان حسن التكوين.
يأخذ المُنقّي محتوى شبيهًا بـ JSON، ويفسّره كما يفعل تقييم JS (eval). وتحديدًا، يتعامل مع هذه التراكيب غير القياسية.
| التركيب | السياسة |
|---|---|
'...' | يتم تحويل السلاسل النصية ذات الاقتباس المفرد إلى سلاسل JSON. |
\xAB | يتم تحويل الهروب الست عشري إلى هروب يونيكود في JSON. |
\012 | يتم تحويل الهروب الثماني إلى هروب يونيكود في JSON. |
0xAB | يتم تحويل الأعداد الصحيحة الست عشرية إلى أعداد JSON العشرية. |
012 | يتم تحويل الأعداد الصحيحة الثمانية إلى أعداد JSON العشرية. |
+.5 | يتم فرض تنسيق JSON الأكثر صرامة على الأعداد العشرية. |
[0,,2] | تُملأ الفجوات في المصفوفات بالقيمة null. |
[1,2,3,] | يتم إزالة الفواصل الزائدة. |
{foo:"bar"} | يتم اقتباس أسماء الخصائص غير المقتبسة. |
//comments | يتم إزالة تعليقات JS من نمط السطر والكتلة. |
(...) | يتم إزالة أقواس التجميع. |
يصحح المُنقّي علامات الترقيم المفقودة، وعلامات الاقتباس النهائية، وأقواس الإغلاق غير المتطابقة أو المفقودة. إذا كان الإدخال يحتوي على مسافات بيضاء فقط، فسيتم استبدال سلسلة JSON الصالحة null.
المخرجات هي JSON جيدة التكوين كما هو معرّف في RFC 4627. وتحقق المخرجات الخصائص الإضافية التالية:
"</script" بحيث يمكن تضمينها داخل عنصر script في HTML دون مزيد من الترميز."]]>" بحيث يمكن تضمينها داخل قسم CDATA في XML دون مزيد من الترميز.eval المدمج في Javascript (بعد لفها بين قوسين) أو بواسطة JSON.parse. تحديدًا، لن تحتوي المخرجات على أي حرفيات سلسلة نصية تحتوي على أسطر جديدة في JS (فاصل الفقرة U+2028 أو فاصل الأسطر U+2029).نظرًا لأن المخرجات JSON جيدة التكوين، فإن تمريرها إلى eval لن يكون له أي آثار جانبية ولا متغيرات حرة، وبالتالي فهي ليست ناقلًا لحقن الكود، ولا ناقلًا لتسريب الأسرار.
تضمن هذه المكتبة فقط أن مرحلة سلسلة JSON ← كائن Javascript ليس لها أي آثار جانبية ولا تحل أي متغيرات حرة، ولا يمكنها التحكم في كيفية تفسير كود جانب العميل الآخر للكائن الناتج لاحقًا. لذلك إذا أخذ كود جانب العميل جزءًا من البيانات المحللة التي يتحكم فيها مهاجم وأعاده عبر مفسر قوي مثل eval أو innerHTML، فقد يعاني كود جانب العميل من آثار جانبية غير مقصودة.
var myValue = eval(sanitizedJsonString); // safe
var myEmbeddedValue = eval(myValue.foo); // possibly unsafe
بالإضافة إلى ذلك، لا يمكن لتنقية JSON حماية تطبيق من هجمات النائب المرتبك
var myValue = JSON.parse(sanitizedJsonString);
addToAdminstratorsGroup(myValue.propertyFromUntrustedSource);
ستعيد طريقة sanitize سلسلة الإدخال دون تخصيص مخزن جديد عندما يكون الإدخال JSON صالحًا بالفعل ويحقق الخصائص أعلاه. وبالتالي، إذا استُخدمت على إدخال عادة ما يكون جيد التكوين، فسيكون لها حمل ذاكرة ضئيل.
تستغرق طريقة sanitize زمنًا خطيًا O(n) حيث n هو طول الإدخال في وحدات UTF-16.