Lo que el Developer Data Toolkit no puede hacer
Cada utilidad aquí tiene una ventaja. Esta página indica dónde termina cada uno, por qué y qué usar en su lugar, para que lo sepas antes de depender de él, no después.
Restricciones que se aplican a todo.
Todo el procesamiento ocurre en una pestaña del navegador, utilizando la memoria de su dispositivo. Eso es lo que hace que la afirmación de privacidad sea cierta y también es la fuente de todos los límites de tamaño que aparecen a continuación. Cada utilidad limita explícitamente su entrada y rechaza el trabajo de gran tamaño con un mensaje claro en lugar de congelar la página.
Dos funciones necesitan un contexto seguro (https:// o localhost) porque ese es el único lugar donde los navegadores exponen la API Web Crypto: hash SHA y generación de UUID. Si se abren a través de HTTP simple en una dirección LAN, ambos le indicarán que no están disponibles. Ninguno de los dos sustituirá una implementación escrita a mano, porque vale la pena confiar en la del navegador.
No hay ningún trabajador de servicio, por lo que la primera carga necesita una conexión de red. Después de eso, nada de lo que hace el kit de herramientas requiere uno.
JSON
RFC estricto 8259 únicamente. Se rechazan los comentarios, las comas finales, las cadenas entre comillas simples, las claves sin comillas y NaN o Infinity; estas son características literales de objetos JSON5 o JavaScript, no JSON. El validador nombra cuál encontró, por lo que el rechazo es al menos procesable.
Los números se analizan como IEEE-754 se duplica, que es lo que hace JSON.parse. Los números enteros superiores a 2^53 pierden precisión en el recorrido de ida y vuelta. Si está manejando identificadores grandes, deben ser cadenas en el propio JSON; no hay forma de que ninguna herramienta de JavaScript recupere un valor que el formato no puede representar.
El orden de las claves se conserva tal como está escrito y la clasificación opcional se aplica únicamente a las claves de objetos. El orden de la matriz nunca se cambia, porque reordenar una matriz cambia los datos en lugar de su presentación.
Se rechazan documentos con más de 8 millones de caracteres.
Convertidores de sintaxis
Nueve conversiones dirigidas: JSON a YAML, YAML a JSON, JSON a XML, XML a JSON, JSON a TOML, TOML a JSON, YAML a TOML, TOML a YAML, JSON a CSV. Todo lo que no esté en esa lista se rechaza con una frase que nombra la ruta que sí existe. El conjunto completo de convenciones se encuentra en la página de convertidores; Esta sección indica dónde terminan las conversiones.
CSV se escribe y nunca se lee. Leerlo significa adivinar un delimitador, un dialecto de citación, una fila de encabezado y un tipo para cada celda: cuatro conjeturas que un convertidor se equivoca silenciosamente.
Los comentarios se pierden en todas direcciones, en todos los formatos que los tengan.
YAML se carga con un esquema restringido que solo puede producir datos en forma de JSON. Las etiquetas personalizadas y específicas del idioma (!!js/function, !!python/object/apply, !!binary, !!timestamp, !!set, !!omap) se rechazan. Eso es deliberado: un cargador que los construye es un constructor de objetos arbitrarios.
Según el esquema predeterminado JSON, "~" y un valor vacío son cadenas en lugar de nulos, y "sí" es la cadena "sí". La opción Esquema principal los resuelve de la manera que la mayoría de la gente espera. Ambos están a salvo; difieren en la interpretación escalar y la herramienta explica cuál es cuál en el punto de elección. Ninguno lee NO como falso; ese es un comportamiento YAML 1.1 y este es YAML 1.2.
Una secuencia YAML de múltiples documentos se convierte en una matriz de documentos, porque ningún otro formato aquí tiene una secuencia. Los anclajes y los alias se resuelven en lugar de conservarse, se rechaza un alias recursivo y se rechaza un documento que se expande más allá de un millón de valores una vez que se siguen sus alias: el patrón de "mil millones de risas" de YAML. Una clave de mapeo repetida mantiene el último valor y la herramienta lo dice.
YAML infinity y NaN no tienen representación en ningún formato de destino. En lugar de dejar que JSON.stringify escriba nulo silenciosamente, la herramienta convierte y le advierte que sucedió.
Un documento XML que contiene un DOCTYPE se rechaza de plano, incluidos los inofensivos, por lo que nunca se puede resolver ninguna entidad externa y ninguna cadena de entidades se puede expandir. No hay opción para permitirlo. El contenido mixto XML pierde la posición del texto en relación con los elementos secundarios, un único elemento repetido no se puede distinguir de uno no repetido y cada valor es una cadena a menos que la inferencia de tipos esté activada.
TOML tiene cuatro tipos temporales que JSON, YAML y XML no tienen. Cada uno se convierte en la cadena RFC 3339 con la que fue escrito, por lo que un viaje de ida y vuelta TOML cambia esos valores en cadenas; No existe un camino sin pérdidas. TOML no tiene valores nulos, por lo que las claves nulas se eliminan de la salida de TOML. La raíz de un documento TOML debe ser una tabla, por lo que una matriz o escalar JSON no puede convertirse en TOML en absoluto. Los números enteros posteriores a 2^53 se convierten en cadenas en lugar de redondearse silenciosamente.
CSV no puede distinguir una cadena vacía de una nula. Los valores anidados se aplanan en nombres de columnas con puntos, por lo que una clave que ya contiene un punto produce un nombre ambiguo sobre el que se advierte en lugar de escaparse. Las celdas de texto que comienzan con =, +, -, @, una tabulación o un retorno de carro tienen el prefijo un apóstrofe, porque las hojas de cálculo las ejecutan como fórmulas.
La entrada tiene un límite por formato: 8 millones de caracteres para JSON, 4 millones para XML, 2 millones para YAML y TOML. La salida CSV tiene un límite de 100,000 filas y 2,000 columnas.
Base64
Sólo texto. Aquí no es necesario cargar archivos: para codificar un archivo necesitarás leerlo, y este conjunto de herramientas se basa en un cuadro de texto. Utilice una herramienta orientada a archivos para eso.
La decodificación produce texto cuando los bytes son UTF-8 válidos e informa un error limpio cuando no lo son; momento en el que la vista de bytes le mostrará el hexadecimal. Una carga útil binaria arbitraria no es texto y pretender lo contrario la corrompería.
Se rechazan las entradas de más de 4 millones de caracteres.
codificación de URL
Las tres reglas ofrecidas (componente, URL completa y formulario) son las tres que define la plataforma. Las variantes específicas de la aplicación (canonicalización de AWS SigV4, codificación porcentual de OAuth 1.0a) difieren ligeramente y no se proporcionan.
El inspector de URL necesita una URL absoluta con un esquema. Una ruta relativa no se puede descomponer en host, ruta y consulta porque no los tiene.
Los nombres de dominio internacionalizados se muestran a medida que el navegador los normaliza, lo que puede ser punycode en lugar del script original.
entidades HTML
La tabla de entidades nombradas cubre el subconjunto práctico (caracteres críticos para el marcado, tipografía, moneda, flechas, matemáticas, griego y latín-1), no todas las referencias con nombre HTML5 2,231. Los nombres fuera de él se enumeran y se dejan exactamente como están escritos, porque inventar un personaje sería peor que dejar el texto como está.
Se requiere un punto y coma final. HTML5 tolera algunas referencias heredadas sin una, pero resolverlas correctamente depende del marcado circundante, que una herramienta de texto independiente no tiene.
La decodificación es de una sola pasada, por lo que "&lt;" decodifica el texto "<" en lugar de "<". Eso es correcto: la doble codificación fue presumiblemente intencionada.
Esto escapa del texto para HTML. No es un desinfectante de HTML: no eliminará un documento lleno de marcas y eliminará las partes peligrosas. Ese es un trabajo diferente y mucho más duro.
Marcas de tiempo
La detección de unidades es una heurística: 10^11 y superiores se leen en milisegundos. Siempre se muestra y siempre se puede anular, pero es una suposición sobre una entrada ambigua.
Las marcas de tiempo de microsegundos y nanosegundos que emiten algunas bases de datos no se detectan. Primero divide por 1,000 o 1,000,000.
Las conversiones utilizan el tiempo POSIX, que no tiene segundos intercalares: 23:59:60 no existe aquí, como tampoco existe en ninguna marca de tiempo de Unix.
La representación en hora local utiliza la zona configurada de su navegador. No puedes elegir una zona IANA arbitraria para renderizar.
Los valores más allá de aproximadamente ±273,790 años de la época exceden lo que las fechas de JavaScript pueden representar y se rechazan.
UUID
Solo se genera la versión 4 (aleatoria). Las versiones 1 y 6 necesitan una dirección MAC y una secuencia de reloj estable; la versión 7 necesita un contador monótono para valer algo; Las versiones 3 y 5 se basan en nombres y necesitan un espacio de nombres y un hash que el navegador no expone para este propósito.
El validador reconoce la forma del texto canónico e informa la versión y variante. No puede indicarle si un UUID se generó correctamente: un UUID de versión 4 producido a partir de un generador débil parece idéntico a uno bueno.
Un lote tiene un límite de valores 500.
Sin Web Crypto no se genera nada. Recurrir a Math.random() produciría identificadores predecibles, por lo que la herramienta los rechaza.
hashes SHA
Solo SHA-1, SHA-256, SHA-384 y SHA-512, porque eso es lo que implementa SubtleCrypto. MD5 está ausente por necesidad y por elección.
SHA-1 está presente para la interoperabilidad heredada y está etiquetado como criptográficamente roto en todos los lugares donde aparece. No lo utilice para nada cuya seguridad importe.
Solo texto: sin hash de archivos, por la misma razón base64 no tiene entrada de archivos.
Sin HMAC, sin derivación de claves, sin hash de contraseñas. Las contraseñas necesitan una función lenta, salada y con mucha memoria, como Argon2id, scrypt o bcrypt; un hash rápido de uso general es la herramienta equivocada y usar uno es un error grave más que uno pequeño.
Diferencia de texto
Sólo comparación a nivel de línea. No hay resaltado a nivel de palabra o de carácter dentro de una línea modificada.
Una línea modificada aparece como una eliminación más una adición, que es como la representa un script de edición basado en líneas.
Las líneas iniciales y finales idénticas se recortan antes de la comparación, por lo que los archivos grandes que difieren en un lugar se procesan rápidamente. Lo que queda tiene un límite de 2,000 líneas diferentes por lado, más allá de las cuales la herramienta se niega en lugar de intentar una asignación que mataría la pestaña.
No hay combinación de tres vías, ni aplicación de parches ni conocimiento de sintaxis.
decodificación JWT
Sólo decodificación. Las firmas nunca se verifican y esto no cambiará; el razonamiento se establece en la guía de tokens.
Los tokens cifrados (JWE, cinco segmentos) no se pueden decodificar sin la clave. La herramienta los identifica y se detiene.
Los tokens anidados no se desenvuelven automáticamente; decodificar el token interno por separado.
Las afirmaciones fuera del conjunto registrado de RFC 7519 se muestran sin interpretación, porque su significado es específico de la aplicación.
Se rechazan los tokens de más de 200,000 caracteres.
Editor HTML WYSIWYG
El desinfectante es una lista de permitidos para la salida propia de este editor, construida sobre un tokenizador de cadenas en lugar de un analizador HTML5 completo. No es un filtro XSS de propósito general, y usarlo como tal sería un error: un navegador puede analizar una carga útil deliberadamente mal formada en un árbol diferente al que lo hace este tokenizador. El HTML que no es de confianza pertenece a un desinfectante del lado del servidor que se ejecuta en un analizador real.
Sólo sobreviven los elementos enumerados: párrafos, títulos, énfasis, listas, enlaces, citas, código y un puñado de etiquetas en línea. Todo lo demás se desenvuelve, por lo que su texto permanece y su etiqueta no. Las imágenes, tablas, colores, fuentes y estilos en línea están ausentes y no hay forma de agregarlos.
script, style, iframe, object, embed, form, svg, math y otros elementos de texto sin formato o contenido externo se eliminan junto con todo lo que contienen.
Los enlaces pueden utilizar http, https, mailto, tel, ftp o una dirección relativa. Cualquier otra cosa, incluidos javascript:, data: y blob:, se rechaza, al igual que una dirección que contenga una referencia de carácter fuera de la tabla de entidades de esta herramienta.
La superficie de edición utiliza document.execCommand. Está en desuso, su reemplazo no está implementado en ningún navegador y el comportamiento difiere entre motores, particularmente para listas anidadas. El modo fuente es la trampilla de escape cuando un comando hace algo incorrecto.
Se rechazan los documentos con más de 500,000 caracteres.
calculadora chmod
Solo los doce bits de permiso: lectura, escritura y ejecución para propietario, grupo y otros, además de setuid, setgid y sticky. Las listas de control de acceso, los atributos extendidos, los contextos SELinux, las capacidades y las ACL de Windows están fuera de lo que un modo puede expresar.
El comando que genera es texto para que usted lo copie. No se ejecuta nada y no se lee ni modifica ningún archivo en su máquina; el campo de ruta existe solo para completar el comando.
No calcula la aritmética de umask y no sabe qué modo tiene actualmente un archivo determinado, porque una página web no puede ver su sistema de archivos.
Docker ejecuta para componer
Un comando de ejecución de Docker se convierte en un servicio. Las configuraciones de múltiples contenedores deben ensamblarse convirtiendo cada comando y fusionando los resultados usted mismo.
--mount, --gpus, --device, --link, --volumes-from, --network-alias y una docena de otros indicadores no tienen equivalente que este convertidor pueda escribir. Cada uno produce una advertencia que nombra la bandera en lugar de desaparecer.
Una bandera que el convertidor no reconoce se considera como si no tomara valor y así lo indica en una advertencia. Si tomó uno, ese valor se malinterpreta: elimine la bandera y agregue su efecto manualmente.
Nada se ejecuta, evalúa ni pasa a un shell: el comando se divide mediante un tokenizador que entiende las comillas y nada más. Por lo tanto, el convertidor no puede expandir $VARIABLES, resolver $(subshells) o leer un archivo --env, porque las tres cosas significarían ejecutar algo o abrir un archivo.
Se verifica que la salida tenga citas YAML correctas, pero no se valida con la especificación de redacción y no se contacta ninguna imagen para confirmar que existe.
Se rechazan los comandos sobre 100,000 caracteres.
Generador de crontabs
Solo sintaxis crontab de cinco campos. Las expresiones Quartz y systemd de seis campos se rechazan con una explicación, al igual que los operadores no estándar L, W, # y ?, y @reboot, que no tiene programación para obtener una vista previa.
Los campos de día del mes y día de la semana se combinan con OR cuando ambos están restringidos, coincidiendo con el cron de Vixie. La herramienta advierte cuando esto aplica, porque es la lectura errónea más común de una línea cron.
Los tiempos de la próxima ejecución provienen de los datos de la zona horaria internacional del navegador. Son una vista previa, no una promesa: la máquina que ejecuta cron puede usar una zona diferente, una versión de tzdata diferente o simplemente puede no estar ejecutándose en ese momento.
El avance busca cinco años de antelación. Un calendario más raro que ese (29 febrero, por ejemplo) mostrará menos de cinco ejecuciones.
¿Qué pasa con lo que pegas?
- Cada conversión, hash, decodificación y diferenciación se ejecuta en la pestaña de su navegador. Ninguna entrada se carga, registra o almacena en un servidor, porque no hay ningún servidor involucrado una vez que la página se ha cargado.
- Los hashes provienen de la implementación Web Crypto del propio navegador y los UUID de su generador aleatorio criptográficamente seguro. Ninguno de los dos implica una llamada de red.
- Nada de lo que escribe se escribe en el almacenamiento local o en una cookie. Al recargar la página se descarta; cerrar la pestaña la descarta.
- La analítica de todo el sitio se ejecutan únicamente en el host de producción canónico configurado y se describen en la Política de Privacidad; Los hosts locales y de vista previa lo rechazan. Los valores, tokens, URL y contenidos de archivos pegados están excluidos de los eventos analíticos propios de ToolAcre. La publicidad está deshabilitada en la configuración actual.
- Dicho esto: una clave JWT o API es una credencial activa. El hábito seguro es nunca pegar uno en una página web que usted no escribió, por muy confiables que sean sus afirmaciones, incluida ésta.
Preguntas
¿Agregarás la carga de archivos para hash o base64?
Posiblemente, pero es un tipo diferente de herramienta (lectura de archivos, informes de progreso, protectores de memoria para archivos grandes) en lugar de una pequeña adición a un cuadro de texto. Hoy la respuesta es no.
¿Agregará verificación de firma al decodificador JWT?
No. La verificación requiere la clave del emisor y un algoritmo fijado fuera del token, y una página web que solicita cualquiera de las dos opciones solicita la capacidad de falsificar tokens. La limitación es la característica.
¿Por qué rechazar grandes insumos en lugar de simplemente ser lentos?
Porque "slow" en una pestaña del navegador significa una página que no responde, y en un teléfono a menudo significa que la pestaña está cerrada y su entrada desaparece. Un rechazo claro con un límite establecido es más útil que una ruleta que nunca termina.
¿Puedo usar esto sin conexión?
Una vez cargada la página, sí: nada de lo que hace el kit de herramientas necesita la red. No hay ningún trabajador de servicio, por lo que la primera carga requiere una conexión.
Limitaciones
- Esta página es en sí misma la lista de limitaciones; Cada sección anterior indica lo que una empresa de servicios públicos no puede hacer.
- Los límites se aplican en el código y se informan en la interfaz, no simplemente se documentan aquí.