Ce que le Developer Data Toolkit ne peut pas faire
Chaque utilitaire ici a un avantage. Cette page indique où chacun s'arrête, pourquoi et quoi utiliser à la place – afin que vous le sachiez avant d'en dépendre, pas après.
Des contraintes qui s'appliquent à tout
Tout le traitement s'effectue dans un seul onglet du navigateur, en utilisant la mémoire de votre appareil. C’est ce qui rend la déclaration de confidentialité vraie, et c’est également la source de chaque limite de taille ci-dessous. Chaque utilitaire limite explicitement ses entrées et refuse un travail surdimensionné avec un message clair plutôt que de figer la page.
Deux fonctionnalités nécessitent un contexte sécurisé – https:// ou localhost – car c'est le seul endroit où les navigateurs exposent l'API Web Crypto : le hachage SHA et la génération d'UUID. Ouverts via HTTP simple sur une adresse LAN, les deux vous diront qu'ils ne sont pas disponibles. Ni l’un ni l’autre ne remplacera une implémentation écrite à la main, car celle du navigateur est celle qui mérite toute confiance.
Il n'y a pas de service worker, le premier chargement nécessite donc une connexion réseau. Après cela, rien de ce que fait la boîte à outils n’en nécessite un.
JSON
RFC stricte 8259 uniquement. Les commentaires, les virgules de fin, les chaînes entre guillemets simples, les clés sans guillemets et NaN ou Infinity sont tous rejetés : il s'agit de fonctionnalités littérales d'objet JSON5 ou JavaScript, et non de JSON. Le validateur nomme celui qu'il a trouvé, de sorte que le rejet est au moins exploitable.
Les nombres sont analysés comme des doubles IEEE-754, ce que fait JSON.parse. Les entiers au-delà de 2^53 perdent en précision lors de l'aller-retour. Si vous gérez des identifiants volumineux, ils doivent être des chaînes dans le JSON lui-même — aucun outil JavaScript n'a aucun moyen de récupérer une valeur que le format ne peut pas représenter.
L'ordre des clés est conservé tel qu'il est écrit et le tri facultatif s'applique uniquement aux clés d'objet. L'ordre du tableau n'est jamais modifié, car la réorganisation d'un tableau modifie les données plutôt que leur présentation.
Les documents dépassant environ 8 millions de caractères sont refusés.
Convertisseurs de syntaxe
Neuf conversions dirigées : JSON en YAML, YAML en JSON, JSON en XML, XML en JSON, JSON en TOML, TOML en JSON, YAML en TOML, TOML en YAML, JSON en CSV. Tout ce qui ne figure pas sur cette liste est refusé avec une phrase nommant l'itinéraire qui existe. L'ensemble complet des conventions se trouve sur la page des convertisseurs ; cette section indique où les conversions s'arrêtent.
CSV est écrit et jamais lu. Le lire signifie deviner un délimiteur, un dialecte de citation, une ligne d'en-tête et un type pour chaque cellule - quatre suppositions qu'un convertisseur se trompe tranquillement.
Les commentaires se perdent dans toutes les directions, dans tous les formats qui en contiennent.
YAML est chargé avec un schéma restreint qui ne peut produire que des données au format JSON. Les balises personnalisées et spécifiques au langage — !!js/function, !!python/object/apply, !!binary, !!timestamp, !!set, !!omap — sont refusées. C'est délibéré : un chargeur qui les construit est un constructeur d'objets arbitraires.
Sous le schéma JSON par défaut, "~" et une valeur vide sont des chaînes plutôt que null, et "oui" est la chaîne "oui". L’option de schéma Core résout ces problèmes de la manière attendue par la plupart des gens. Les deux sont en sécurité ; ils diffèrent par leur interprétation scalaire, et l'outil explique lequel est lequel au moment du choix. Ni l'un ni l'autre ne lit NON comme faux - c'est un comportement YAML 1.1 et c'est YAML 1.2.
Un flux YAML multi-documents devient un tableau de documents, car aucun autre format ici n'a de flux. Les ancres et les alias sont résolus plutôt que conservés, un alias récursif est refusé et un document qui dépasse un million de valeurs une fois ses alias suivis est refusé – le modèle YAML « milliard de rires ». Une clé de mappage répétée conserve la dernière valeur, et l'outil l'indique.
YAML infinity et NaN n'ont aucune représentation dans aucun format cible. Plutôt que de laisser JSON.stringify écrire null en silence, l'outil convertit et vous avertit que cela s'est produit.
Un document XML contenant un DOCTYPE est carrément refusé, y compris les documents inoffensifs, donc aucune entité externe ne peut jamais être résolue et aucune chaîne d'entités ne peut jamais être étendue. Il n’y a aucune option pour l’autoriser. Le contenu mixte XML perd la position du texte par rapport aux éléments enfants, un seul élément répété ne peut pas être distingué d'un élément non répété et chaque valeur est une chaîne à moins que l'inférence de type ne soit activée.
TOML a quatre types temporels que JSON, YAML et XML n'ont pas. Chacun devient la chaîne RFC 3339 sous laquelle il a été écrit, donc un aller-retour TOML change ces valeurs en chaînes ; il n'y a pas de chemin sans perte. TOML n'a pas de valeur nulle, donc les clés nulles sont supprimées de la sortie TOML. La racine d'un document TOML doit être une table, donc un tableau ou un scalaire JSON ne peut pas du tout devenir TOML. Les entiers après 2^53 deviennent des chaînes plutôt que d'être arrondis silencieusement.
CSV ne peut pas distinguer une chaîne vide d'une chaîne nulle. Les valeurs imbriquées sont aplaties en noms de colonnes en pointillés, de sorte qu'une clé qui contient déjà un point produit un nom ambigu qui fait l'objet d'un avertissement plutôt que d'un échappement. Les cellules de texte commençant par =, +, -, @, une tabulation ou un retour chariot sont préfixées par une apostrophe, car les feuilles de calcul les exécutent sous forme de formules.
Les entrées sont plafonnées par format : 8 millions de caractères pour JSON, 4 millions pour XML, 2 millions pour YAML et TOML. La sortie CSV est limitée à 100,000 lignes et 2,000 colonnes.
Base64
Texte uniquement. Il n'y a pas de téléchargement de fichier ici : pour encoder un fichier, vous devez le lire, et cette boîte à outils est construite autour d'une zone de texte. Utilisez un outil orienté fichier pour cela.
Le décodage produit du texte lorsque les octets sont UTF-8 valides et signale une erreur propre lorsqu'ils ne le sont pas - auquel cas la vue des octets vous montrera l'hexadécimal à la place. Une charge utile binaire arbitraire n’est pas du texte, et prétendre le contraire le corrompt.
Les saisies dépassant environ 4 millions de caractères sont refusées.
Encodage d'URL
Les trois règles proposées — composant, URL complète et formulaire — sont les trois définies par la plateforme. Les variantes spécifiques à l'application (canonisation AWS SigV4, codage en pourcentage OAuth 1.0a) diffèrent légèrement et ne sont pas fournies.
L'inspecteur d'URL a besoin d'une URL absolue avec un schéma. Un chemin relatif ne peut pas être décomposé en hôte, chemin et requête, car il ne les possède pas.
Les noms de domaine internationalisés sont affichés au fur et à mesure que le navigateur les normalise, ce qui peut être du punycode plutôt que le script d'origine.
Entités HTML
La table des entités nommées couvre le sous-ensemble pratique — caractères critiques pour le balisage, typographie, monnaie, flèches, mathématiques, grec et latin — 1 — et non toutes les 2,231 références nommées HTML5. Les noms à l'extérieur sont répertoriés pour vous et laissés exactement tels qu'ils sont écrits, car inventer un personnage serait pire que de laisser le texte seul.
Un point-virgule final est requis. HTML5 tolère quelques références héritées sans aucune, mais leur résolution correcte dépend du balisage environnant, qu'un outil de texte autonome ne possède pas.
Le décodage est un seul passage, donc "&lt;" décode en texte "<" plutôt qu'en "<". C’est exact : le double encodage était vraisemblablement intentionnel.
Cela échappe au texte pour HTML. Ce n'est pas un désinfectant HTML : il ne prendra pas un document rempli de balises et n'en supprimera pas les parties dangereuses. C'est un travail différent et beaucoup plus difficile.
Horodatages
La détection d'unité est une heuristique : 10^11 et supérieur est lu en millisecondes. Il est toujours affiché et toujours modifiable, mais il s'agit d'une supposition sur une entrée ambiguë.
Les horodatages en microsecondes et nanosecondes, émis par certaines bases de données, ne sont pas détectés. Divisez d'abord par 1,000 ou 1,000,000.
Les conversions utilisent le temps POSIX, qui n'a pas de secondes intercalaires — 23:59:60 n'existe pas ici, car il n'existe dans aucun horodatage Unix.
Le rendu en heure locale utilise la zone configurée de votre navigateur. Vous ne pouvez pas choisir une zone IANA arbitraire dans laquelle effectuer le rendu.
Les valeurs au-delà d'environ ±273,790 années à partir de l'époque dépassent ce que les dates JavaScript peuvent représenter et sont refusées.
UUID
Seule la version 4 (aléatoire) est générée. Les versions 1 et 6 nécessitent une adresse MAC et une séquence d'horloge stable ; la version 7 a besoin d'un compteur monotone pour valoir quoi que ce soit ; les versions 3 et 5 sont basées sur le nom et nécessitent un espace de noms et un hachage que le navigateur n'expose pas à cette fin.
Le validateur reconnaît la forme canonique du texte et signale la version et la variante. Il ne peut pas vous dire si un UUID a été bien généré — un UUID version-4 produit à partir d'un générateur faible semble identique à un bon.
Un lot est limité aux valeurs 500.
Sans Web Crypto, rien n’est généré. Revenir à Math.random() produirait des identifiants prévisibles, donc l'outil refuse à la place.
Hachages SHA
Seulement SHA-1, SHA-256, SHA-384 et SHA-512, car c'est ce que SubtleCrypto implémente. MD5 est absent par nécessité et par choix.
SHA-1 est présent pour l'interopérabilité héritée et est étiqueté comme cryptographiquement cassé partout où il apparaît. Ne l'utilisez pas pour quoi que ce soit dont la sécurité est importante.
Texte uniquement - pas de hachage de fichier, pour la même raison, base64 n'a pas d'entrée de fichier.
Pas de HMAC, pas de dérivation de clé, pas de hachage de mot de passe. Les mots de passe nécessitent une fonction lente, salée et exigeante en mémoire, telle que Argon2id, scrypt ou bcrypt ; un hachage rapide à usage général n’est pas le bon outil et en utiliser un est une grave erreur plutôt qu’une petite.
Différence de texte
Comparaison au niveau de la ligne uniquement. Il n’y a pas de surbrillance au niveau des mots ou des caractères dans une ligne modifiée.
Une ligne modifiée apparaît comme une suppression plus un ajout, c'est ainsi qu'un script d'édition basé sur une ligne la représente.
Les lignes de début et de fin identiques sont coupées avant la comparaison, de sorte que les fichiers volumineux différant en un seul endroit soient rapides. Ce qui reste est limité à 2,000 lignes différentes par côté, au-delà desquelles l'outil refuse plutôt que de tenter une allocation qui tuerait l'onglet.
Il n'y a pas de fusion à trois, pas d'application de correctifs et aucune connaissance de la syntaxe.
Décodage JWT
Décodage uniquement. Les signatures ne sont jamais vérifiées, et cela ne changera pas – le raisonnement est exposé dans le guide des jetons.
Les jetons cryptés (JWE, cinq segments) ne peuvent pas être décodés sans la clé. L'outil les identifie et s'arrête.
Les jetons imbriqués ne sont pas déballés automatiquement ; décoder le jeton interne séparément.
Les revendications en dehors de l'ensemble enregistré de RFC 7519 sont affichées sans interprétation, car leur signification est spécifique à l'application.
Les jetons de plus de 200,000 caractères sont refusés.
Éditeur HTML WYSIWYG
Le désinfectant est une liste verte pour la propre sortie de cet éditeur, construite sur un tokeniseur de chaîne plutôt que sur un analyseur HTML5 complet. Il ne s'agit pas d'un filtre XSS à usage général, et l'utiliser comme tel serait une erreur : un navigateur peut analyser une charge utile délibérément mal formée dans une arborescence différente de celle de ce tokeniser. Le HTML non fiable appartient à un désinfectant côté serveur exécuté sur un véritable analyseur.
Seuls les éléments répertoriés survivent : paragraphes, titres, emphase, listes, liens, citations, code et une poignée de balises en ligne. Tout le reste est déballé, donc son texte reste et pas sa balise. Les images, tableaux, couleurs, polices et styles en ligne sont tous absents et il n'y a aucun moyen de les ajouter.
le script, le style, l'iframe, l'objet, l'intégration, le formulaire, le svg, les mathématiques et les autres éléments de texte brut ou de contenu étranger sont supprimés avec tout ce qu'ils contiennent.
Les liens peuvent utiliser http, https, mailto, tel, ftp ou une adresse relative. Tout le reste, y compris les schémas JavaScript, data et blob, est refusé, tout comme une adresse contenant une référence de caractère en dehors de la table d'entités de cet outil.
La surface d'édition utilise document.execCommand. Il est obsolète, son remplacement n'est implémenté dans aucun navigateur et son comportement diffère selon les moteurs, en particulier pour les listes imbriquées. Le mode source est la trappe de secours lorsqu'une commande fait la mauvaise chose.
Les documents de plus de 500,000 caractères sont refusés.
Calculatrice Chmod
Les douze bits d'autorisation uniquement : lecture, écriture et exécution pour le propriétaire, le groupe et autres, plus setuid, setgid et sticky. Les listes de contrôle d'accès, les attributs étendus, les contextes SELinux, les capacités et les ACL Windows sont tous en dehors de ce qu'un mode peut exprimer.
La commande qu'il crée est un texte que vous pouvez copier. Rien n'est exécuté et aucun fichier sur votre machine n'est lu ou modifié — le champ chemin n'existe que pour remplir la commande.
Il ne calcule pas l'arithmétique umask et ne connaît pas le mode actuel d'un fichier donné, car une page Web ne peut pas voir votre système de fichiers.
Docker exécuté pour composer
Une commande Docker Run devient un service. Les configurations multi-conteneurs doivent être assemblées en convertissant chaque commande et en fusionnant les résultats vous-même.
--mount, --gpus, --device, --link, --volumes-from, --network-alias et une douzaine d'autres indicateurs n'ont pas d'équivalent que ce convertisseur écrira. Chacun produit un avertissement nommant le drapeau plutôt que de disparaître.
Un indicateur que le convertisseur ne reconnaît pas est traité comme ne prenant aucune valeur et l'indique dans un avertissement. S'il en a fallu un, cette valeur est mal interprétée : supprimez le drapeau et ajoutez son effet à la main.
Rien n'est exécuté, évalué ou transmis à un shell : la commande est divisée par un tokeniser qui comprend les guillemets et rien d'autre. Le convertisseur ne peut donc pas développer $VARIABLES, résoudre $(subshells) ou lire un fichier --env, car les trois signifieraient exécuter quelque chose ou ouvrir un fichier.
La sortie est vérifiée pour les citations YAML correctes, mais n'est pas validée par rapport à la spécification Compose, et aucune image n'est contactée pour confirmer son existence.
Les commandes sur 100,000 caractères sont refusées.
Générateur Crontab
Syntaxe crontab à cinq champs uniquement. Les expressions Quartz et systemd à six champs sont rejetées avec une explication, tout comme les opérateurs non standard L, W, # et ?, et @reboot, qui n'a pas de calendrier de prévisualisation.
Les champs jour du mois et jour de la semaine sont combinés avec OR lorsque les deux sont restreints, correspondant à Vixie cron. L'outil avertit chaque fois que cela s'applique, car il s'agit de l'erreur de lecture la plus courante d'une ligne cron.
Les heures de prochaine exécution proviennent des données de fuseau horaire international du navigateur. Il s'agit d'un aperçu, pas d'une promesse : la machine exécutant cron peut utiliser une zone différente, une version de tzdata différente, ou peut simplement ne pas fonctionner à ce moment-là.
L'aperçu recherche cinq ans à l'avance. Un calendrier plus rare que cela – 29 février, par exemple – affichera moins de cinq courses.
Qu'arrive-t-il à ce que vous collez
- Chaque conversion, hachage, décodage et différence s'exécute dans l'onglet de votre navigateur. Aucune entrée n'est téléchargée, enregistrée ou stockée sur un serveur, car aucun serveur n'est impliqué une fois la page chargée.
- Les hachages proviennent de la propre implémentation Web Crypto du navigateur et les UUID de son générateur aléatoire cryptographiquement sécurisé. Ni l’un ni l’autre n’implique un appel réseau.
- Rien de ce que vous tapez n’est écrit dans le stockage local ou dans un cookie. Le rechargement de la page la supprime ; la fermeture de l'onglet le supprime.
- Les analyses à l'échelle du site s'exécutent uniquement sur l'hôte de production canonique configuré et sont divulguées dans la politique de confidentialité ; les hôtes locaux et de prévisualisation le refusent. Les valeurs collées, les jetons, les URL et le contenu des fichiers sont exclus des propres événements d'analyse de ToolAcre. La publicité est désactivée dans la configuration actuelle.
- Cela dit : un JWT ou une clé API est un identifiant en direct. La bonne habitude est de ne jamais en coller un dans une page Web que vous n’avez pas écrite, aussi dignes de confiance que ses affirmations – y compris celle-ci.
Questions
Allez-vous ajouter le téléchargement de fichiers pour le hachage ou en base64 ?
Peut-être, mais il s'agit d'un autre type d'outil (lecture de fichiers, rapports de progression, protection de la mémoire pour les fichiers volumineux) plutôt que d'un petit ajout à une zone de texte. Aujourd'hui, la réponse est non.
Allez-vous ajouter une vérification de signature au décodeur JWT ?
La vérification nécessite la clé de l’émetteur et un algorithme épinglé en dehors du jeton, et une page Web demandant l’un ou l’autre demande la possibilité de falsifier des jetons. La limitation est la fonctionnalité.
Pourquoi refuser les gros intrants au lieu d’être simplement lent ?
Parce que "slow" dans un onglet de navigateur signifie une page qui ne répond pas, et sur un téléphone, cela signifie souvent que l'onglet est supprimé et que votre saisie a disparu. Un refus clair avec une limite indiquée est plus utile qu'un spinner qui ne finit jamais.
Puis-je l'utiliser hors ligne ?
Une fois la page chargée, oui – rien de ce que fait la boîte à outils n’a besoin du réseau. Il n'y a pas de service worker, donc le premier chargement nécessite une connexion.
Limites
- Cette page est elle-même la liste des limitations ; chaque section ci-dessus indique ce qu'un service public ne peut pas faire.
- Les limites sont appliquées dans le code et signalées dans l'interface, et pas seulement documentées ici.