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

تمتلك العديد من التطبيقات كميات كبيرة من التعليمات البرمجية التي تستخدم طرقًا مخصصة (ad-hoc) لتوليد مخرجات JSON.
غالبًا ما تمر هذه المخرجات جميعها عبر قدر صغير من كود الإطار البرمجي (framework) قبل إرسالها عبر الشبكة. يمكن لهذا القدر الصغير من كود الإطار البرمجي استخدام هذه المكتبة للتأكد من أن المخرجات المخصصة متوافقة مع المعايير وآمنة للتمرير إلى أدوات إلغاء التسلسل القوية (والمفرطة) مثل عامل eval في JavaScript.
كما غالبًا ما تمتلك التطبيقات واجهات برمجة تطبيقات لخدمات الويب تستقبل JSON من مصادر متنوعة. وعند إنشاء هذا JSON بطرق مخصصة، يمكن لهذه المكتبة تهذيبه إلى شكل يسهل تحليله.
من خلال دمج هذه المكتبة في الكود الذي يرسل ويستقبل الطلبات والاستجابات، يمكنها مساعدة مهندسي البرمجيات على ضمان أمان النظام وسلامة بنيته.
يستقبل المنقّي محتوى شبيهًا بـ JSON ويفسّره كما سيفعل eval في JavaScript. على وجه التحديد، يتعامل مع هذه الصيغ غير القياسية.
يصحح المنقّي علامات الترقيم المفقودة، والاقتباسات الختامية، وأقواس الإغلاق غير المتطابقة أو المفقودة. إذا كان الإدخال يحتوي على مسافات بيضاء فقط، يتم استبداله بسلسلة JSON الصالحة null.
يكون الناتج JSON صحيح البنية وفقًا لما يعرّفه RFC 4627. ويحقق الناتج الخصائص الإضافية التالية:
"<script" أو "</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 البرمجية.
| الصيغة | السياسة |
|---|
'...' | يتم تحويل السلاسل ذات الاقتباسات المفردة إلى سلاسل JSON. |
\xAB | يتم تحويل الهروب السداسي العشري (hex escapes) إلى هروب Unicode في JSON. |
\012 | يتم تحويل الهروب الثماني (octal escapes) إلى هروب Unicode في JSON. |
0xAB | يتم تحويل القيم الصحيحة السداسية العشرية إلى أرقام عشرية JSON. |
012 | يتم تحويل القيم الصحيحة الثمانية إلى أرقام عشرية JSON. |
+.5 | يتم تحويل الأعداد العشرية إلى صيغة JSON الأكثر صرامة. |
[0,,2] | يتم ملء الفجوات في المصفوفات بالقيمة null. |
[1,2,3,] | تتم إزالة الفواصل الزائدة. |
{foo:"bar"} | يتم اقتباس أسماء الخصائص غير المقتبسة. |
//comments | تتم إزالة تعليقات JavaScript السطرية والكتلية. |
(...) | تتم إزالة أقواس التجميع. |