
Étant donné un contenu de type JSON, le JSON Sanitizer le convertit en JSON valide.
Il peut être placé à l'une ou l'autre extrémité d'un pipeline de données pour aider à respecter le principe de Postel :
soyez conservateur dans ce que vous faites, soyez libéral dans ce que vous acceptez des autres
Appliqué à un contenu de type JSON provenant d'autrui, il produira un JSON bien formé qui devrait satisfaire tout analyseur que vous utilisez.
Appliqué à votre sortie avant de l'envoyer, il corrigera les erreurs mineures d'encodage et facilitera l'intégration de votre JSON dans du HTML et du XML.

De nombreuses applications disposent de grandes quantités de code qui utilisent des méthodes ad hoc pour générer des sorties JSON.
Fréquemment, ces sorties passent toutes par une petite quantité de code d'infrastructure avant d'être envoyées sur le réseau. Cette petite quantité de code d'infrastructure peut utiliser cette bibliothèque pour s'assurer que les sorties ad hoc sont conformes aux normes et peuvent être passées sans danger à des désérialiseurs (trop) puissants comme l'opérateur eval de Javascript.
Les applications ont également souvent des API de services web qui reçoivent du JSON de diverses sources. Lorsque ce JSON est créé à l'aide de méthodes ad hoc, cette bibliothèque peut le transformer en une forme facile à analyser.
En intégrant cette bibliothèque au code qui envoie et reçoit les requêtes et les réponses, elle peut aider les architectes logiciels à garantir la sécurité et la bonne formation (well-formedness) à l'échelle du système.
Le sanitizer prend un contenu de type JSON et l'interprète comme le ferait eval en JS. Plus précisément, il traite ces constructions non standard.
Le sanitizer corrige la ponctuation manquante, les guillemets de fin et les crochets fermants manquants ou mal appariés. Si une entrée ne contient que des espaces, la chaîne JSON valide null est alors substituée.
La sortie est du JSON bien formé tel que défini par RFC 4627. La sortie satisfait aux propriétés supplémentaires suivantes :
"</script" (sans tenir compte de la casse), elle peut donc être intégrée dans un élément script HTML sans encodage supplémentaire."]]>", elle peut donc être intégrée dans une section CDATA XML sans encodage supplémentaire.eval de Javascript (après avoir été entourée de parenthèses) ou par JSON.parse. Plus précisément, la sortie ne contiendra aucun littéral de chaîne avec des retours à la ligne JS intégrés (séparateur de paragraphe U+2028 ou séparateur de ligne U+2029).Étant donné que la sortie est du JSON bien formé, la passer à eval n'aura aucun effet de bord et aucune variable libre ; elle n'est donc ni un vecteur d'injection de code, ni un vecteur d'exfiltration de secrets.
Cette bibliothèque garantit uniquement que la phase chaîne JSON → objet Javascript n'a aucun effet de bord et ne résout aucune variable libre, et ne peut pas contrôler la manière dont d'autres codes côté client interprètent ensuite l'objet Javascript résultant. Ainsi, si un code côté client prend une partie des données analysées contrôlée par un attaquant et la repasse par un interpréteur puissant comme eval ou innerHTML, ce code côté client pourrait subir des effets de bord imprévus.
var myValue = eval(sanitizedJsonString); // safe
var myEmbeddedValue = eval(myValue.foo); // possibly unsafe
De plus, l'assainissement du JSON ne peut pas protéger une application contre les attaques par député confus.
var myValue = JSON.parse(sanitizedJsonString);
addToAdminstratorsGroup(myValue.propertyFromUntrustedSource);
La méthode sanitize renverra la chaîne d'entrée sans allouer un nouveau tampon lorsque l'entrée est déjà un JSON valide qui satisfait aux propriétés ci-dessus. Ainsi, si elle est utilisée sur une entrée généralement bien formée, elle a un surcoût mémoire minimal.
La méthode sanitize s'exécute en temps O(n), où n est la longueur de l'entrée en unités de code UTF-16.
| Construction | Politique |
|---|
'...' | Les chaînes entre guillemets simples sont converties en chaînes JSON. |
\xAB | Les échappements hexadécimaux sont convertis en échappements unicode JSON. |
\012 | Les échappements octaux sont convertis en échappements unicode JSON. |
0xAB | Les littéraux entiers hexadécimaux sont convertis en nombres décimaux JSON. |
012 | Les littéraux entiers octaux sont convertis en nombres décimaux JSON. |
+.5 | Les nombres décimaux sont convertis au format plus strict de JSON. |
[0,,2] | Les élisions dans les tableaux sont remplies avec null. |
[1,2,3,] | Les virgules finales sont supprimées. |
{foo:"bar"} | Les noms de propriété non quotés sont mis entre guillemets. |
//comments | Les commentaires de ligne et de bloc de style JS sont supprimés. |
(...) | Les parenthèses de regroupement sont supprimées. |