
Given JSON-like content, The JSON Sanitizer converts it to valid JSON.
Dado conteúdo semelhante a JSON, o JSON Sanitizer converte isso em JSON válido.
Isso pode ser anexado em qualquer extremidade de um pipeline de dados para ajudar a satisfazer o princípio de Postel:
seja conservador no que você faz, seja liberal no que você aceita dos outros
Aplicado a conteúdo semelhante a JSON de outros, produzirá JSON bem formado que deve satisfazer qualquer analisador que você use.
Aplicado à sua saída antes de enviar, forçará pequenos erros de codificação e tornará mais fácil incorporar seu JSON em HTML e XML.

Muitas aplicações possuem grandes quantidades de código que usam métodos ad-hoc para gerar saídas JSON.
Frequentemente, essas saídas passam todas por uma pequena quantidade de código de estrutura antes de serem enviadas pela rede. Esse pequeno código de estrutura pode usar esta biblioteca para garantir que as saídas ad-hoc estejam em conformidade com os padrões e sejam seguras para passar para desserializadores (excessivamente) poderosos como o operador eval do Javascript.
As aplicações também costumam ter APIs de serviço web que recebem JSON de várias fontes. Quando esse JSON é criado usando métodos ad-hoc, esta biblioteca pode massageá-lo em uma forma que seja fácil de analisar.
Ao conectar esta biblioteca ao código que envia e recebe requisições e respostas, esta biblioteca pode ajudar arquitetos de software a garantir segurança e conformidade em todo o sistema.
O sanitizador aceita conteúdo semelhante a JSON e o interpreta como o eval do JS faria. Especificamente, lida com estas construções não padronizadas.
O sanitizador corrige pontuação ausente, aspas finais e colchetes de fechamento incompatíveis ou ausentes. Se uma entrada contiver apenas espaço em branco, a string JSON válida null é substituída.
A saída é JSON bem formado conforme definido pela RFC 4627. A saída satisfaz estas propriedades adicionais:
"<script", "</script" ou "<!--" e, portanto, pode ser incorporada em um elemento script HTML sem codificação adicional."]]>" e, portanto, pode ser incorporada em uma seção CDATA XML sem codificação adicional.eval embutido do Javascript (depois de envolvida em parênteses) ou por JSON.parse. Especificamente, a saída não conterá literais de string com novas linhas JS incorporadas (separador de Parágrafo U+2028 ou separador de Linha U+2029).Como a saída é JSON bem formado, passá-lo para eval não terá efeitos colaterais nem variáveis livres, portanto não é um vetor de injeção de código nem um vetor para exfiltração de segredos.
Esta biblioteca apenas garante que a fase string JSON → objeto Javascript não tenha efeitos colaterais e não resolva variáveis livres, e não pode controlar como outro código do lado do cliente interpreta posteriormente o objeto Javascript resultante. Portanto, se o código do lado do cliente pegar uma parte dos dados analisados que é controlada por um atacante e passá-la de volta por um interpretador poderoso como eval ou innerHTML, esse código do lado do cliente pode sofrer efeitos colaterais indesejados.
var myValue = eval(sanitizedJsonString); // seguro
var myEmbeddedValue = eval(myValue.foo); // potencialmente inseguro
Além disso, sanitizar JSON não pode proteger uma aplicação contra ataques de Confused Deputy
var myValue = JSON.parse(sanitizedJsonString);
addToAdminstratorsGroup(myValue.propertyFromUntrustedSource);
O método sanitize retornará a string de entrada sem alocar um novo buffer quando a entrada já for JSON válido que satisfaça as propriedades acima. Assim, se usado em entrada que geralmente é bem formada, tem sobrecarga de memória mínima.
O método sanitize leva tempo O(n) onde n é o comprimento da entrada em unidades de código UTF-16.
| Construção | Política |
|---|
'...' | Strings com aspas simples são convertidas para strings JSON. |
\xAB | Escapes hexadecimais são convertidos para escapes Unicode JSON. |
\012 | Escapes octais são convertidos para escapes Unicode JSON. |
0xAB | Literais inteiros hexadecimais são convertidos para números decimais JSON. |
012 | Literais inteiros octais são convertidos para números decimais JSON. |
+.5 | Números decimais são convertidos para o formato mais rigoroso do JSON. |
[0,,2] | Elisões em arrays são preenchidas com null. |
[1,2,3,] | Vírgulas finais são removidas. |
{foo:"bar"} | Nomes de propriedades sem aspas são colocados entre aspas. |
//comments | Comentários de linha e bloco no estilo JS são removidos. |
(...) | Parênteses de agrupamento são removidos. |