
Biblioteca Java que converte conteúdo malformado semelhante a JSON em JSON seguro e em conformidade com os padrões, prevenindo injeção de código e garantindo incorporabilidade em contextos HTML/XML.
Dado conteúdo semelhante a JSON, o JSON Sanitizer converte-o 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 vindo 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
framework antes de serem enviadas pela rede. Essa pequena quantidade de
código de framework 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.
Aplicações também frequentemente possuem APIs de serviço web que recebem JSON de uma variedade de fontes. Quando esse JSON é criado usando métodos ad-hoc, esta biblioteca pode moldá-lo em uma forma fácil de analisar.
Ao conectar esta biblioteca ao código que envia e recebe requisições e respostas, ela pode ajudar arquitetos de software a garantir a segurança e boa formação em todo o sistema.
O sanitizador recebe conteúdo semelhante a JSON e o interpreta como o eval do JS faria.
Especificamente, ele lida com estas construções não padronizadas.
O sanitizador corrige pontuação faltante, aspas finais, e colchetes de fechamento
incorrespondentes ou faltantes. Se uma entrada contém apenas espaços em branco,
então a string JSON válida null é substituída.
A saída é JSON bem formado conforme definido por RFC 4627. A saída satisfaz estas propriedades adicionais:
"</script", portanto pode ser incorporada dentro de um elemento script HTML sem codificação adicional."]]>", portanto pode ser incorporada dentro de uma seção CDATA XML sem codificação adicional.eval embutido do Javascript (após ser envolvida em parênteses) ou por JSON.parse. Especificamente, a saída não conterá literais de string com quebras de linha JS embutidas (separador de parágrafo U+2028 ou separador de linha U+2029).Como a saída é JSON bem formado, passá-la 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 está sob controle de um atacante e passá-la de volta através de um
interpretador poderoso como eval ou innerHTML, então esse código do lado do
cliente pode sofrer efeitos colaterais indesejados.
var myValue = eval(sanitizedJsonString); // seguro
var myEmbeddedValue = eval(myValue.foo); // possivelmente inseguro
Além disso, sanitizar JSON não pode proteger uma aplicação de ataques de Deputado Confuso
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á é JSON válido que satisfaz 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 forçados para o formato mais restrito do JSON. |
[0,,2] | Elipses 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. |