Português (Brasil)

O que o Developer Data Toolkit não pode fazer

Cada utilitário aqui tem uma vantagem. Esta página indica onde cada um para, por que e o que usar - para que você descubra antes de depender disso, não depois.

Restrições que se aplicam a tudo

Todo o processamento acontece em uma aba do navegador, utilizando a memória do seu dispositivo. É isso que torna verdadeira a reivindicação de privacidade e também é a fonte de todos os limites de tamanho abaixo. Cada utilitário limita explicitamente sua entrada e recusa trabalhos superdimensionados com uma mensagem clara, em vez de congelar a página.

Dois recursos precisam de um contexto seguro - https:// ou localhost - porque esse é o único lugar onde os navegadores expõem a geração Web Crypto API: SHA hashing e UUID. Abertos em HTTP simples em um endereço LAN, ambos informarão que não estão disponíveis. Nenhum dos dois substituirá uma implementação escrita à mão, porque vale a pena confiar no próprio navegador.

Não há service worker, portanto, a primeira carga precisa de uma conexão de rede. Depois disso, nada que o kit de ferramentas faça exige um.

JSON

Somente RFC 8259 estrito. Comentários, vírgulas finais, strings entre aspas simples, chaves sem aspas e NaN ou Infinity são todos rejeitados - estes são recursos literais de objeto JSON5 ou JavaScript, não JSON. O validador nomeia qual encontrou, portanto a rejeição é pelo menos acionável.

Os números são analisados ​​como IEEE-754 duplica, que é o que JSON.parse faz. Números inteiros além de 2^53 perdem precisão no percurso de ida e volta. Se você estiver lidando com identificadores grandes, eles precisam ser strings no próprio JSON — não há como nenhuma ferramenta JavaScript recuperar um valor que o formato não pode representar.

A ordem das chaves é preservada conforme escrita e a classificação opcional se aplica apenas às chaves dos objetos. A ordem do array nunca é alterada, porque a reordenação de um array altera os dados e não sua apresentação.

Documentos com mais de 8 milhões de caracteres são recusados.

Conversores de sintaxe

Nove conversões direcionadas - JSON para YAML, YAML para JSON, JSON para XML, XML para JSON, JSON para TOML, TOML para JSON, YAML para TOML, TOML para YAML, JSON para CSV. Qualquer coisa que não esteja nessa lista é recusada com uma frase nomeando a rota que existe. O conjunto completo de convenções está na página de conversores; esta seção indica onde as conversões param.

CSV é escrito e nunca lido. Ler isso significa adivinhar um delimitador, um dialeto de citação, uma linha de cabeçalho e um tipo para cada célula – quatro palpites que um conversor erra silenciosamente.

Os comentários se perdem em todas as direções, em todos os formatos que os possuem.

YAML é carregado com um esquema restrito que só pode produzir dados no formato JSON. Tags personalizadas e específicas do idioma — !!js/function, !!python/object/apply, !!binary, !!timestamp, !!set, !!omap — são recusadas. Isso é deliberado: um carregador que os constrói é um construtor de objetos arbitrários.

No esquema padrão JSON, "~" e um valor vazio são strings em vez de nulos, e "yes" é a string "yes". A opção de esquema principal resolve isso da maneira que a maioria das pessoas espera. Ambos estão seguros; eles diferem na interpretação escalar e a ferramenta explica qual é qual no momento da escolha. Nenhum dos dois lê NO como falso - esse é um comportamento YAML 1.1 e este é YAML 1.2.

Um fluxo YAML de vários documentos se torna uma matriz de documentos, porque nenhum outro formato aqui possui um fluxo. Âncoras e aliases são resolvidos em vez de preservados, um alias recursivo é recusado e um documento que ultrapassa um milhão de valores depois que seus aliases são seguidos é recusado — o padrão YAML de “bilhões de risadas”. Uma chave de mapeamento repetida mantém o último valor e a ferramenta diz isso.

YAML infinito e NaN não têm representação em nenhum formato de destino. Em vez de deixar JSON.stringify escrever nulo silenciosamente, a ferramenta converte e avisa que isso aconteceu.

Um documento XML contendo um DOCTYPE é recusado liminarmente, incluindo os inofensivos, portanto, nenhuma entidade externa pode ser resolvida e nenhuma cadeia de entidades pode ser expandida. Não há opção para permitir isso. XML o conteúdo misto perde a posição do texto em relação aos elementos filhos, um único elemento repetido não pode ser distinguido de um não repetido e cada valor é uma string, a menos que a inferência de tipo esteja ativada.

TOML possui quatro tipos temporais que JSON, YAML e XML não possuem. Cada um se torna a string RFC 3339 como foi escrita, portanto, uma viagem de ida e volta TOML altera esses valores em strings; não existe caminho sem perdas. TOML não tem nulo, então as chaves nulas são eliminadas da saída TOML. A raiz de um documento TOML deve ser uma tabela, portanto, um array ou escalar JSON não pode se tornar TOML. Inteiros após 2^53 tornam-se strings em vez de serem arredondados silenciosamente.

CSV não consegue distinguir uma string vazia de uma nula. Os valores aninhados são nivelados em nomes de colunas pontilhados, portanto, uma chave que já contém um ponto produz um nome ambíguo sobre o qual é avisado em vez de escapado. As células de texto que começam com =, +, -, @, uma tabulação ou um retorno de carro são prefixadas com um apóstrofo, porque as planilhas as executam como fórmulas.

A entrada é limitada por formato: 8 milhões de caracteres para JSON, 4 milhões para XML, 2 milhões para YAML e TOML. A saída de CSV é limitada a 100,000 linhas e 2,000 colunas.

Base64

Somente texto. Não há upload de arquivo aqui: para codificar um arquivo você precisa lê-lo, e este kit de ferramentas é construído em torno de uma caixa de texto. Use uma ferramenta orientada a arquivos para isso.

A decodificação produz texto quando os bytes são válidos UTF-8 e relata um erro limpo quando não são - ponto em que a visualização de bytes mostrará o hexadecimal. Uma carga binária arbitrária não é texto e fingir o contrário a corromperia.

Entradas com mais de 4 milhões de caracteres são recusadas.

Codificação URL

As três regras oferecidas – componente, whole-URL e formulário – são as três definidas pela plataforma. Variantes específicas do aplicativo (AWS canonização SigV4, OAuth 1.0a codificação percentual) diferem em pequenos aspectos e não são fornecidas.

O inspetor URL precisa de um URL absoluto com um esquema. Um caminho relativo não pode ser decomposto em host, caminho e consulta, porque não os possui.

Os nomes de domínio internacionalizados são mostrados à medida que o navegador os normaliza, o que pode ser punycode em vez do script original.

HTML entidades

A tabela de entidade nomeada cobre o subconjunto prático — caracteres críticos de marcação, tipografia, moeda, setas, matemática, grego e latim-1 — nem todas as referências nomeadas 2,231 HTML5. Os nomes fora dele são listados para você e deixados exatamente como estão escritos, porque inventar um personagem seria pior do que deixar o texto sozinho.

É necessário um ponto e vírgula final. HTML5 tolera algumas referências herdadas sem uma, mas resolvê-las corretamente depende da marcação circundante, que uma ferramenta de texto independente não possui.

A decodificação é uma passagem única, então "&amp;lt;" decodifica para o texto "&lt;" em vez de "<". Isso é correto: a codificação dupla foi presumivelmente intencional.

Isso escapa do texto para HTML. Não é um desinfetante HTML – não pega um documento cheio de marcações e remove as partes perigosas. Esse é um trabalho diferente e muito mais difícil.

Carimbos de data e hora

A detecção de unidade é uma heurística: 10^11 e superior é lido como milissegundos. É sempre mostrado e sempre substituível, mas é uma suposição de entrada ambígua.

Os carimbos de data/hora de microssegundos e nanossegundos, emitidos por alguns bancos de dados, não são detectados. Divida por 1,000 ou 1,000,000 primeiro.

As conversões usam o tempo POSIX, que não tem segundos bissextos - 23:59:60 não existe aqui, assim como não existe em nenhum carimbo de data/hora Unix.

A renderização em horário local usa a zona configurada do seu navegador. Você não pode escolher uma zona IANA arbitrária para renderizar.

Valores além de aproximadamente ±273,790 anos da época excedem o que as datas JavaScript podem representar e são recusados.

UUIDs

Somente a versão 4 (aleatória) é gerada. As versões 1 e 6 precisam de um endereço MAC e uma sequência de relógio estável; a versão 7 precisa de um contador monotônico para valer alguma coisa; as versões 3 e 5 são baseadas em nomes e precisam de um namespace e um hash que o navegador não expõe para essa finalidade.

O validador reconhece a forma de texto canônico e relata a versão e variante. Ele não pode dizer se um UUID foi bem gerado - uma versão-4 UUID produzida a partir de um gerador fraco parece idêntica a um bom.

Um lote é limitado a valores 500.

Sem Web Crypto, nada é gerado. Voltar para Math.random() produziria identificadores previsíveis, então a ferramenta se recusa.

SHA hashes

Apenas SHA-1, SHA-256, SHA-384 e SHA-512, porque são isso que o SubtleCrypto implementa. MD5 está ausente por necessidade e por escolha.

SHA-1 está presente para interoperabilidade legada e é rotulado como criptograficamente quebrado em todos os lugares em que aparece. Não o use para nada cuja segurança seja importante.

Somente texto - sem hash de arquivo, pelo mesmo motivo que base64 não tem entrada de arquivo.

Sem HMAC, sem derivação de chave, sem hash de senha. As senhas precisam de uma função lenta, salgada e com muita memória, como Argon2id, scrypt ou bcrypt; um hash rápido de uso geral é a ferramenta errada e usá-lo é um erro grave, e não um erro pequeno.

Diferença de texto

Comparação apenas em nível de linha. Não há realce no nível da palavra ou no nível do caractere em uma linha alterada.

Uma linha modificada aparece como uma remoção mais uma adição, que é como um script de edição baseado em linha a representa.

Linhas iniciais e finais idênticas são cortadas antes da comparação, portanto, arquivos grandes que diferem em um local são rápidos. O que resta é limitado a 2,000 linhas diferentes por lado, além das quais a ferramenta recusa em vez de tentar uma alocação que mataria a guia.

Não há mesclagem de três vias, aplicação de patch e reconhecimento de sintaxe.

JWT decodificação

Somente decodificação. As assinaturas nunca são verificadas e isso não mudará — o raciocínio é apresentado no guia de tokens.

Os tokens criptografados (JWE, cinco segmentos) não podem ser decodificados sem a chave. A ferramenta os identifica e para.

Os tokens aninhados não são desembrulhados automaticamente; decodifique o token interno separadamente.

As reivindicações fora do conjunto registrado de RFC 7519 são mostradas sem interpretação, porque seu significado é específico da aplicação.

Tokens com mais de 200,000 caracteres são recusados.

Editor HTML WYSIWYG

O sanitiser é uma lista de permissões para a saída deste editor, construída em um tokenizador de string em vez de um analisador HTML5 completo. Não é um filtro XSS de uso geral, e usá-lo como tal seria um erro: um navegador pode analisar uma carga deliberadamente malformada em uma árvore diferente da que este tokenizador faz. HTML não confiável pertence a um desinfetante do lado do servidor em execução em um analisador real.

Apenas os elementos listados sobrevivem: parágrafos, títulos, ênfases, listas, links, citações, código e algumas tags embutidas. Todo o resto é desembrulhado, então seu texto permanece e sua tag não. Imagens, tabelas, cores, fontes e estilos embutidos estão ausentes e não há como adicioná-los.

script, estilo, iframe, objeto, incorporação, formulário, svg, matemática e outros elementos de texto bruto ou conteúdo estrangeiro são removidos junto com tudo dentro deles.

Os links podem usar http, https, mailto, tel, ftp ou um endereço relativo. Qualquer outra coisa — incluindo javascript:, data: e blob: — é recusada, assim como um endereço contendo uma referência de caractere fora da tabela de entidades desta ferramenta.

A superfície de edição usa document.execCommand. Ele está obsoleto, sua substituição não é implementada em nenhum navegador e o comportamento difere entre os mecanismos, principalmente para listas aninhadas. O modo de origem é a saída de emergência quando um comando faz a coisa errada.

Documentos com mais de 500,000 caracteres serão recusados.

Calculadora Chmod

Somente os doze bits de permissão: leitura, gravação e execução para proprietário, grupo e outros, além de setuid, setgid e sticky. Listas de controle de acesso, atributos estendidos, contextos SELinux, capacidades e ACLs do Windows estão todos fora do que um modo pode expressar.

O comando que ele cria é um texto para você copiar. Nada é executado e nenhum arquivo em sua máquina é lido ou alterado — o campo de caminho existe apenas para preencher o comando.

Ele não calcula a aritmética umask e não sabe qual modo um determinado arquivo possui atualmente, porque uma página da web não pode ver seu sistema de arquivos.

Docker executado para compor

Um comando docker run torna-se um serviço. As configurações de vários contêineres devem ser montadas convertendo cada comando e mesclando você mesmo os resultados.

--mount, --gpus, --device, --link, --volumes-from, --network-alias e uma dúzia de outros sinalizadores não têm equivalente que este conversor irá gravar. Cada um produz um aviso nomeando a bandeira em vez de desaparecer.

Um sinalizador que o conversor não reconhece é tratado como sem valor e indica isso em um aviso. Se for necessário um, esse valor será mal interpretado – remova o sinalizador e adicione seu efeito manualmente.

Nada é executado, avaliado ou passado para um shell: o comando é dividido por um tokenizador que entende citações e nada mais. O conversor, portanto, não pode expandir $VARIABLES, resolver $(subshells) ou ler um --env-file, porque todos os três significariam executar algo ou abrir um arquivo.

A saída é verificada quanto à cotação YAML correta, mas não é validada em relação à especificação do Compose e nenhuma imagem é contatada para confirmar se ela existe.

Comandos com mais de 100,000 caracteres são recusados.

Gerador Crontab

Somente sintaxe crontab de cinco campos. As expressões Quartz de seis campos e systemd são rejeitadas com uma explicação, assim como os operadores não padrão L, W, # e ?, e @reboot, que não tem programação para visualização.

Os campos de dia do mês e dia da semana são combinados com OR quando ambos são restritos, correspondendo ao cron do Vixie. A ferramenta avisa sempre que isso se aplica, pois é o erro de leitura mais comum de uma linha cron.

Os horários da próxima execução vêm dos dados de fuso horário internacional do navegador. Eles são uma prévia, não uma promessa: a máquina que executa o cron pode usar uma zona diferente, uma versão diferente do tzdata ou pode simplesmente não estar em execução no momento.

A visualização pesquisa cinco anos à frente. Uma programação mais rara que essa – 29 fevereiro, por exemplo – mostrará menos de cinco execuções.

O que acontece com o que você cola

  • Cada conversão, hash, decodificação e comparação é executada na guia do seu navegador. Nenhuma entrada é carregada, registrada ou armazenada em um servidor, porque não há nenhum servidor envolvido depois que a página é carregada.
  • Hashes vêm da implementação de criptografia da Web do próprio navegador e UUIDs de seu gerador aleatório criptograficamente seguro. Nenhum dos dois envolve uma chamada de rede.
  • Nada do que você digita é gravado no armazenamento local ou em um cookie. Recarregar a página a descarta; fechar a guia a descarta.
  • A análise de todo o site é executada apenas no host de produção canônico configurado e é divulgada na Política de Privacidade; hosts locais e de visualização recusam. Valores colados, tokens, URLs e conteúdos de arquivos são excluídos dos próprios eventos analíticos de ToolAcre. A publicidade está desativada na configuração atual.
  • Dito isto: uma chave JWT ou API é uma credencial ativa. O hábito seguro é nunca colar um em uma página da web que você não escreveu, por mais confiáveis ​​que sejam suas afirmações – incluindo esta.

Questões

Você adicionará upload de arquivo para hash ou base64?

Possivelmente, mas é um tipo diferente de ferramenta – leitura de arquivos, relatórios de progresso, protetores de memória para arquivos grandes – em vez de uma pequena adição a uma caixa de texto. Hoje a resposta é não.

Você adicionará verificação de assinatura ao decodificador JWT?

A verificação requer a chave do emissor e um algoritmo fixado fora do token, e uma página da web solicitando qualquer um deles está solicitando a capacidade de falsificar tokens. A limitação é o recurso.

Por que recusar grandes insumos em vez de apenas ser lento?

Porque "lento" em uma guia do navegador significa uma página que não responde, e em um telefone geralmente significa que a guia foi encerrada e sua entrada desapareceu. Uma recusa clara com um limite declarado é mais útil do que um botão giratório que nunca acaba.

Posso usar isso off-line?

Depois que a página for carregada, sim – nada que o kit de ferramentas faça precisa da rede. Não há service worker, portanto, o primeiro carregamento requer uma conexão.

Limitações

  • Esta página é em si a lista de limitações; cada seção acima declara o que um utilitário não pode fazer.
  • Os limites são impostos no código e relatados na interface, e não apenas documentados aqui.