Italiano

Cosa non può fare il Developer Data Toolkit

Ogni utilità qui ha un vantaggio. Questa pagina indica dove si fermano ciascuno, perché e cosa usare invece, così lo scopri prima di dipendere da esso, non dopo.

Vincoli che valgono per tutto

Tutta l'elaborazione avviene in un'unica scheda del browser, utilizzando la memoria del tuo dispositivo. Questo è ciò che rende vera la rivendicazione della privacy ed è anche la fonte di tutti i limiti di dimensione riportati di seguito. Ciascuna utilità limita esplicitamente il proprio input e rifiuta lavori di grandi dimensioni con un messaggio chiaro anziché congelare la pagina.

Due funzionalità richiedono un contesto sicuro, https:// o localhost, perché è l'unico posto in cui i browser espongono la crittografia Web API: hashing SHA e generazione UUID. Aperto su HTTP su un indirizzo LAN, entrambi ti diranno che non sono disponibili. Nessuno dei due sostituirà un’implementazione scritta a mano, perché quella del browser è quella di cui vale la pena fidarsi.

Non è presente alcun addetto al servizio, quindi il primo carico necessita di una connessione di rete. Dopodiché, nulla di ciò che fa il toolkit ne richiede uno.

JSON

Solo RFC 8259 rigoroso. Commenti, virgole finali, stringhe con virgolette singole, chiavi senza virgolette e NaN o Infinity vengono tutti rifiutati: si tratta di funzionalità letterali oggetto JSON5 o JavaScript, non JSON. Il validatore nomina quale ha trovato, quindi il rifiuto è almeno perseguibile.

I numeri vengono analizzati come IEEE-754 raddoppia, che è ciò che fa JSON.parse. I numeri interi oltre 2^53 perdono precisione durante il viaggio di andata e ritorno. Se gestisci identificatori di grandi dimensioni, devono essere stringhe nello stesso JSON: non c'è modo per nessuno strumento JavaScript di recuperare un valore che il formato non può rappresentare.

L'ordine delle chiavi viene mantenuto così come è scritto e l'ordinamento facoltativo si applica solo alle chiavi degli oggetti. L'ordine dell'array non viene mai modificato, poiché il riordino di un array modifica i dati anziché la sua presentazione.

I documenti superiori a circa 8 milioni di caratteri vengono rifiutati.

Convertitori di sintassi

Nove conversioni dirette: JSON in YAML, YAML in JSON, JSON in XML, XML in JSON, JSON in TOML, TOML a JSON, YAML a TOML, TOML a YAML, JSON a CSV. Tutto ciò che non è presente nell'elenco viene rifiutato con una frase che nomina il percorso che esiste. Il set completo delle convenzioni si trova nella pagina dei convertitori; questa sezione indica dove si fermano le conversioni.

CSV è scritto e mai letto. Leggerlo significa indovinare un delimitatore, un dialetto di virgolette, una riga di intestazione e un tipo per ogni cella: quattro ipotesi che un convertitore sbaglia silenziosamente.

I commenti si perdono in ogni direzione, in ogni formato che li abbia.

YAML viene caricato con uno schema limitato che può produrre solo dati con formato JSON. I tag personalizzati e specifici della lingua — !!js/function, !!python/object/apply, !!binary, !!timestamp, !!set, !!omap — vengono rifiutati. Questo è intenzionale: un caricatore che li costruisce è un costruttore di oggetti arbitrari.

Nello schema JSON predefinito, "~" e un valore vuoto sono stringhe anziché null e "yes" è la stringa "yes". L'opzione dello schema Core risolve questi problemi nel modo in cui la maggior parte delle persone si aspetta. Entrambi sono sicuri; differiscono nell'interpretazione scalare e lo strumento spiega quale è quale nel punto di scelta. Nessuno dei due legge NO come falso: questo è un comportamento YAML 1.1 e questo è YAML 1.2.

Un flusso YAML multi-documento diventa un array di documenti, perché nessun altro formato qui ha un flusso. Ancore e alias vengono risolti anziché preservati, un alias ricorsivo viene rifiutato e un documento che si espande oltre un milione di valori una volta seguiti i suoi alias viene rifiutato: il modello YAML "miliardi di risate". Una chiave di mappatura ripetuta mantiene l'ultimo valore e lo strumento lo dice.

YAML Infinity e NaN non sono rappresentati in nessun formato di destinazione. Invece di lasciare che JSON.stringify scriva silenziosamente null, lo strumento converte e ti avvisa che è successo.

Un documento XML contenente un DOCTYPE viene rifiutato completamente, compresi quelli innocui, quindi nessuna entità esterna potrà mai essere risolta e nessuna catena di entità potrà mai essere espansa. Non esiste alcuna opzione per consentirlo. Il contenuto misto XML perde la posizione del testo rispetto agli elementi secondari, un singolo elemento ripetuto non può essere distinto da uno non ripetuto e ogni valore è una stringa a meno che non sia attivata l'inferenza del tipo.

TOML ha quattro tipi temporali che JSON, YAML e XML non hanno. Ciascuno diventa la stringa RFC 3339 con cui è stato scritto, quindi un viaggio di andata e ritorno TOML modifica tali valori in stringhe; non esiste un percorso senza perdite. TOML non ha valori null, quindi le chiavi null vengono eliminate dall'output TOML. La radice di un documento TOML deve essere una tabella, quindi un array o uno scalare JSON non può diventare affatto TOML. Gli interi successivi a 2^53 diventano stringhe anziché essere arrotondati silenziosamente.

CSV non riesce a distinguere una stringa vuota da una stringa nulla. I valori nidificati vengono appiattiti in nomi di colonne punteggiate, quindi una chiave che contiene già un punto produce un nome ambiguo di cui viene visualizzato un avviso anziché l'escape. Le celle di testo che iniziano con =, +, -, @, una tabulazione o un ritorno a capo sono precedute da un apostrofo, poiché i fogli di calcolo le eseguono come formule.

L'immissione è limitata per formato: 8 milioni di caratteri per JSON, 4 milioni per XML, 2 milioni per YAML e TOML. L'output di CSV è limitato a 100,000 righe e 2,000 colonne.

Base64

Solo testo. Non è previsto il caricamento di file qui: per codificare un file dovresti leggerlo e questo toolkit è costruito attorno a una casella di testo. Utilizzare uno strumento orientato ai file per questo.

La decodifica produce testo quando i byte sono validi UTF-8 e segnala un errore pulito quando non lo sono - a quel punto la vista byte mostrerà invece l'esadecimale. Un payload binario arbitrario non è testo e fingere il contrario lo corromperebbe.

Gli input superiori a circa 4 milioni di caratteri vengono rifiutati.

Codifica URL

Le tre regole offerte (componente, intero-URL e modulo) sono le tre definite dalla piattaforma. Le varianti specifiche dell'applicazione (AWS Canonicalizzazione SigV4, codifica percentuale OAuth 1.0a) differiscono leggermente e non sono fornite.

L'ispettore URL necessita di un URL assoluto con uno schema. Un percorso relativo non può essere scomposto in host, percorso e query, perché non li possiede.

I nomi di dominio internazionalizzati vengono visualizzati mentre il browser li normalizza, il che potrebbe essere punycode anziché lo script originale.

HTML entità

La tabella delle entità denominate copre il sottoinsieme pratico: caratteri critici per il markup, tipografia, valuta, frecce, matematica, greco e latino-1 - non tutti i riferimenti denominati 2,231 HTML5. I nomi al di fuori di esso vengono elencati per te e lasciati esattamente come scritti, perché inventare un personaggio sarebbe peggio che lasciare il testo da solo.

È richiesto un punto e virgola finale. HTML5 tollera alcuni riferimenti legacy senza uno, ma risolverli correttamente dipende dal markup circostante, che uno strumento di testo autonomo non ha.

La decodifica è un passaggio singolo, quindi "&amp;lt;" decodifica nel testo "<" anziché in "<". Esatto: la doppia codifica era presumibilmente intenzionale.

Questo evita il testo per HTML. Non è un disinfettante HTML: non prenderà un documento pieno di markup e non rimuoverà le parti pericolose. Questo è un lavoro diverso e molto più difficile.

Timestamp

Il rilevamento delle unità è euristico: 10^11 e versioni successive vengono letti in millisecondi. Viene sempre mostrato e sempre sovrascrivibile, ma è un'ipotesi su input ambiguo.

I timestamp dei microsecondi e dei nanosecondi, emessi da alcuni database, non vengono rilevati. Dividi prima per 1,000 o 1,000,000.

Le conversioni utilizzano il tempo POSIX, che non ha secondi intercalati: 23:59:60 non esiste qui, poiché non esiste in nessun timestamp Unix.

Il rendering in ora locale utilizza la zona configurata del tuo browser. Non puoi scegliere una zona IANA arbitraria in cui eseguire il rendering.

I valori che vanno oltre circa ±273,790 anni dall'epoca superano ciò che le date JavaScript possono rappresentare e vengono rifiutati.

UUID

Viene generata solo la versione 4 (casuale). Le versioni 1 e 6 necessitano di un indirizzo MAC e di una sequenza orologio stabile; la versione 7 ha bisogno di un contatore monotono per valere qualcosa; le versioni 3 e 5 sono basate sui nomi e necessitano di uno spazio dei nomi e di un hash che il browser non espone per questo scopo.

Il validatore riconosce la forma canonica del testo e riporta versione e variante. Non può dirti se un UUID è stato generato bene: una versione-4 UUID prodotta da un generatore debole sembra identica a uno buono.

Un batch è limitato a valori 500.

Senza Web Crypto non viene generato nulla. Il ricorso a Math.random() produrrebbe identificatori prevedibili, quindi lo strumento invece rifiuta.

SHA hash

Solo SHA-1, SHA-256, SHA-384 e SHA-512, perché questi sono ciò che SubtleCrypto implementa. MD5 è assente per necessità e per scelta.

SHA-1 è presente per l'interoperabilità legacy ed è etichettato come crittograficamente danneggiato ovunque appaia. Non usarlo per nulla la cui sicurezza è importante.

Solo testo: nessun hashing dei file, per lo stesso motivo per cui base64 non ha input di file.

No HMAC, nessuna derivazione della chiave, nessun hashing della password. Le password necessitano di una funzione lenta, salata e che richiede molta memoria come Argon2id, scrypt o bcrypt; un hash veloce e generico è lo strumento sbagliato e utilizzarne uno è un errore grave piuttosto che piccolo.

Diff. testo

Solo confronto a livello di linea. Non è presente alcuna evidenziazione a livello di parola o di carattere all'interno di una riga modificata.

Una riga modificata appare come una rimozione più un'aggiunta, che è il modo in cui la rappresenta uno script di modifica basato su righe.

Le linee iniziali e finali identiche vengono tagliate prima del confronto, quindi i file di grandi dimensioni che differiscono in un punto sono veloci. Ciò che rimane è limitato a 2,000 linee diverse per lato, oltre le quali lo strumento rifiuta anziché tentare un'allocazione che ucciderebbe la scheda.

Non esiste un'unione a tre vie, nessuna applicazione di patch e nessuna consapevolezza della sintassi.

Decodifica JWT

Solo decodifica. Le firme non vengono mai verificate e ciò non cambierà: il ragionamento è illustrato nella guida ai token.

I token crittografati (JWE, cinque segmenti) non possono essere decodificati senza la chiave. Lo strumento li identifica e si ferma.

I token nidificati non vengono scartati automaticamente; decodificare il token interno separatamente.

Le attestazioni esterne al set registrato di RFC 7519 vengono visualizzate senza interpretazione, perché il loro significato è specifico dell'applicazione.

I token superiori a 200,000 caratteri vengono rifiutati.

Editor HTML WYSIWYG

Il disinfettante è una lista consentita per l'output di questo editor, costruita su un tokenizzatore di stringhe anziché su un parser HTML5 completo. Non è un filtro XSS di uso generale e utilizzarlo come tale sarebbe un errore: un browser può analizzare un payload deliberatamente malformato in un albero diverso da quello di questo tokenizzatore. HTML non attendibile appartiene a un disinfettante lato server in esecuzione contro un parser reale.

Sopravvivono solo gli elementi elencati: paragrafi, titoli, enfasi, elenchi, collegamenti, virgolette, codice e una manciata di tag incorporati. Tutto il resto viene scartato, quindi il suo testo rimane e il suo tag no. Immagini, tabelle, colori, caratteri e stili incorporati sono tutti assenti e non c'è modo di aggiungerli.

script, stile, iframe, oggetto, incorporamento, modulo, SVG, matematica e gli altri elementi di testo non elaborato o di contenuto estraneo vengono rimossi insieme a tutto ciò che è al loro interno.

I collegamenti possono utilizzare http, https, mailto, tel, ftp o un indirizzo relativo. Qualsiasi altra cosa, inclusi javascript:, data: e blob:, viene rifiutata, così come un indirizzo contenente un riferimento a un carattere esterno alla tabella delle entità di questo strumento.

La superficie di modifica utilizza document.execCommand. È deprecato, la sua sostituzione non è implementata in nessun browser e il comportamento differisce tra i motori, in particolare per gli elenchi nidificati. La modalità sorgente è la via di fuga quando un comando fa la cosa sbagliata.

I documenti con più di 500,000 caratteri vengono rifiutati.

Calcolatore Chmod

Solo i dodici bit di autorizzazione: lettura, scrittura ed esecuzione per proprietario, gruppo e altro, più setuid, setgid e sticky. Elenchi di controllo degli accessi, attributi estesi, contesti SELinux, funzionalità e ACL di Windows sono tutti al di fuori di ciò che una modalità può esprimere.

Il comando che crea è testo da copiare. Non viene eseguito nulla e nessun file sul tuo computer viene letto o modificato: il campo del percorso esiste solo per compilare il comando.

Non calcola l'aritmetica umask e non sa quale modalità ha attualmente un dato file, perché una pagina web non può vedere il tuo filesystem.

Docker corre per comporre

Un comando di esecuzione della finestra mobile diventa un servizio. Le configurazioni multi-contenitore devono essere assemblate convertendo ogni comando e unendo tu stesso i risultati.

--mount, --gpus, --device, --link, --volumes-from, --network-alias e una dozzina di altri flag non hanno equivalenti che questo convertitore scriverà. Ciascuno produce un avviso che nomina la bandiera anziché scomparire.

Un flag che il convertitore non riconosce viene considerato come se non avesse alcun valore e lo indica in un avviso. Se ne ha preso uno, quel valore è stato interpretato male: rimuovi la bandiera e aggiungi il suo effetto a mano.

Niente viene eseguito, valutato o passato a una shell: il comando è suddiviso da un tokeniser che comprende il virgolette e nient'altro. Il convertitore quindi non può espandere $VARIABLES, risolvere $(subshell) o leggere --env-file, perché tutti e tre significherebbero eseguire qualcosa o aprire un file.

L'output viene controllato per la corretta citazione YAML ma non viene convalidato rispetto alla specifica di composizione e nessuna immagine viene contattata per confermarne l'esistenza.

I comandi su 100,000 caratteri vengono rifiutati.

Generatore di crontab

Solo sintassi crontab a cinque campi. Le espressioni Quartz e systemd a sei campi vengono rifiutate con una spiegazione, così come gli operatori non standard L, W, # e ? e @reboot, che non ha una pianificazione per l'anteprima.

I campi del giorno del mese e del giorno della settimana vengono combinati con OR quando entrambi sono limitati, corrispondendo a Vixie cron. Lo strumento avvisa ogni volta che ciò si verifica, perché è la lettura errata più comune di una riga cron.

Gli orari di esecuzione successiva provengono dai dati del fuso orario internazionale del browser. Sono un'anteprima, non una promessa: la macchina che esegue cron potrebbe utilizzare una zona diversa, una versione tzdata diversa o potrebbe semplicemente non essere in esecuzione in quel momento.

L'anteprima effettua la ricerca cinque anni prima. Un programma più raro di quello, ad esempio 29 febbraio, mostrerà meno di cinque corse.

Cosa succede a ciò che incolli

  • Ogni conversione, hash, decodifica e differenza viene eseguita nella scheda del tuo browser. Nessun input viene caricato, registrato o archiviato su un server, perché non è coinvolto alcun server una volta caricata la pagina.
  • Gli hash provengono dall'implementazione Web Crypto del browser e gli UUID dal suo generatore casuale crittograficamente sicuro. Nessuno dei due prevede una chiamata di rete.
  • Niente di ciò che digiti viene scritto nella memoria locale o in un cookie. Ricaricando la pagina la si elimina; chiudendo la scheda la si elimina.
  • L'analisi a livello di sito viene eseguita solo sull'host di produzione canonico configurato e viene divulgata nell'Informativa sulla privacy; gli host locali e di anteprima lo rifiutano. Valori, token, URL e contenuti dei file incollati sono esclusi dagli eventi di analisi di ToolAcre. La pubblicità è disabilitata nella configurazione attuale.
  • Detto questo: una chiave JWT o API è una credenziale attiva. L'abitudine più sicura è non incollarne mai uno in una pagina web che non hai scritto tu, per quanto attendibili siano le sue affermazioni, inclusa questa.

Domande

Aggiungerai il caricamento di file per l'hashing o base64?

Forse, ma si tratta di un tipo diverso di strumento (lettura di file, reporting sullo stato di avanzamento, protezioni della memoria per file di grandi dimensioni) piuttosto che una piccola aggiunta a una casella di testo. Oggi la risposta è no.

Aggiungerete la verifica della firma al decoder JWT?

No. La verifica richiede la chiave dell'emittente e un algoritmo bloccato all'esterno del token, e una pagina web che richiede entrambi richiede la possibilità di falsificare token. La limitazione è la funzionalità.

Perché rifiutare grandi input invece di essere lenti?

Perché "lento" in una scheda del browser significa una pagina che non risponde, e su un telefono spesso significa che la scheda viene chiusa e il tuo input è sparito. Un rifiuto netto con un limite stabilito è più utile di uno spinner che non finisce mai.

Posso usarlo offline?

Dopo che la pagina è stata caricata, sì, nulla di ciò che fa il toolkit ha bisogno della rete. Non è presente alcun addetto al servizio, quindi il primo carico richiede una connessione.

Limitazioni

  • Questa pagina è essa stessa l'elenco delle limitazioni; ciascuna sezione precedente indica ciò che un'utilità non può fare.
  • I limiti vengono applicati nel codice e riportati nell'interfaccia, non semplicemente documentati qui.