Blog • Freigabemechanismus
Verwenden Sie URL Hash, um JSON zu teilen: Grundsätze, Einschränkungen und Verwendung des Nicht-Uploads auf den Server
Der Kollege sagte: „Ihre Seite JSON ist korrekt, sobald Sie sie formatieren, aber ich werde hier einen Fehler melden.“ Es ist lästig, Dateien hin und her zu übertragen, und Screenshots können nicht mehr geändert werden.
URL Hash TeilenSchreiben Sie das aktuelle Tool und geben Sie es in die Adressleiste ein#hinten. Wenn die andere Partei denselben Link öffnet, stellt der Browser die linke und rechte Spalte lokal wieder her; Bei normalen Seitenanfragen werden diese Daten nicht an den Server gesendet.
Dies ist nicht dasselbe wie „es auf einer Online-Formatierungswebsite veröffentlichen und dann auf „Teilen“ klicken.“ Letzteres postet normalerweise zuerst den Originaltext an das Backend einer anderen Person und gibt Ihnen dann einen kurzen Link. Hash Beim Teilen gibt es keinen solchen Schritt.
Dieser Artikel erklärt:
- URL Hash Warum erscheint es normalerweise nicht in den Serverprotokollen?
- DevBox von
#tool=…&data=…wie man codiert - Warum Base64 nicht verschlüsselt ist
- Um wie viel wird der Link erweitert und welche Software kürzt ihn?
- Wann sollten Sie das Teilen nutzen und wann sollten Sie das Teilen beenden?
Denken Sie zuerst daran:Hash funktioniert, weil der Browser es nicht standardmäßig verwendet#Senden Sie es später an den Server. Dabei handelt es sich aber weder um eine Verschlüsselung, noch kann es verhindern, dass die Chat-Software die Verbindung unterbricht. Lassen Sie uns diese Angelegenheit nach „Prinzip → Kodierung → Länge → Grenze“ aufschlüsseln.
URL Hash Was ist Teilen?
Das vollständige URL kann in zwei Teile unterteilt werden: den Teil, den der Server sieht, und den Teil, der nur im Browser verbleibt.
Anfrage an den Server fragment / Hash (nur im Browser belassen)
Was DevBoxs „Teilen“ bewirkt, ist: Codieren Sie die aktuelle Tool-ID und die linke Eingabe in Hash und codieren Sie dann den gesamten Absatzlocation.hrefIn die Zwischenablage kopieren. Nachdem die andere Partei es geöffnet hat, liest das Seitenskriptlocation.hash, insein eigener BrowserWerkzeuge und Texte wiederherstellen.
-
1
Sie klicken in Ihrem Browser auf „Teilen“.
Die Eingabe wird zuerst in UTF-8 konvertiert, dann in Base64 kompiliert und als geschrieben
#tool=&data=. -
2
Senden Sie das vollständige URL an Kollegen
Nachdem die andere Partei dieselbe Site geöffnet hat, liest das Seitenskript
location.hash. -
3
Im Browser der anderen Partei wiederherstellen
Lokale Formatierung, Prüfsumme oder Diff. Der Server empfängt nur die Seite selbst, nicht diese JSON.
Dies undGeben Sie JSON processing in den Browser einEs ist das gleiche Prinzip: Berechnungen erfolgen lokal und die Weitergabe erfolgt nicht über unsere Datenbank. Datenschutzgrenzen sind eingeschriebenDatenschutzerklärungAbschnitt 3.
Warum Hash nicht auf den Server hochgeladen wird
Das Fragment geht nicht in die HTTP-Anfrage ein
drückenMDNs Erklärung von URL.hashundFragment im WHATWG URL-Standard,#Danach kommt die Fragment-ID. Wenn der Browser navigiert, enthält der Pfad/die Abfrage der HTTP-Anfrage diesen Absatz nicht.
Daher enthält das Zugriffsprotokoll normalerweise nur:
GET /json/format.html HTTP/1.1
statt:
GET /json/format.html#data=……
Aus diesem Grund eignet sich Hash für „Ich möchte nicht, dass die Site eine Kopie meiner Paste speichert“, aberNicht geeignetWenn der sichere Kanal: Die Daten in URL noch intakt sind, durchlaufen sie diesen Hop des Netzwerks standardmäßig nicht.
Der Unterschied zwischen Abfragezeichenfolge und Abfragezeichenfolge
| Schreibmethode | Beispiel | Der Server kann es nicht sehen | Geeignet für das, was zu tun ist |
|---|---|---|---|
| Query | ?tool=json-format&data=… |
Ja. Erscheint in Anforderungszeilen, Reverse-Proxys und CDN-Protokollen | Parameter, die vom Server gelesen werden müssen |
| Hash | #tool=json-format&data=… |
Gewöhnliche Seitenanfragen werden nicht gebracht | Status nur für Frontend-Skripte |
Wenn jemand das gleiche Base64 eingibt?Später sieht der Effekt gleich aus, die Daten wurden jedoch in das Serverprotokoll eingetragen. DevBox Schreiben Sie nur Hash, um diese Ebene zu vermeiden.
Außerdem: Der Referrer trägt normalerweise kein Fragment. Wenn Sie von der Freigabeseite auf den externen Link klicken, kann die andere Site im Allgemeinen die JSON in der Hash nicht abrufen. Dies ist das Standardverhalten des Browsers und keine zusätzliche Verschlüsselung, die wir durchführen.
Wie sieht der Freigabelink von DevBox aus?
Nachdem Sie auf „Teilen“ geklickt haben, ist Hash eine GruppeURLSearchParams:
#tool=json-format&data=<Base64>
tool
Aktuelle Werkzeug-ID. Nach dem Öffnen des Links wechseln Sie zum entsprechenden Arbeitsbereich, anstatt immer auf „JSON Format“ zu verfallen. Zu den allgemeinen Werten gehören:json-format,json-validate,json5,json-path,json-diff.
Wenn Sie nur zwischen den Tools wechseln und nicht auf „Teilen“ klicken, wird die Adressleiste auf aktualisiert#tool=…,Enthält keine Daten. Dies dient dazu, sich zu merken, welches Tool Sie verwenden, und nicht den Inhalt des Editors in den Verlauf zu schreiben.
data
Geben Sie links den Text UTF-8 ein und führen Sie dann Base64 aus. Implementierungsäquivalent zu:
btoa(unescape(encodeURIComponent(input)))
zuerstencodeURIComponentEs soll Chinesisch und Emoji passabel machenbtoa. Gehen Sie bei der Wiederherstellung den umgekehrten Weg. Dies wird mit MDN besprochenBase64-Kodierung der Unicode-ZeichenfolgeEs ist das gleiche Problem.
Verschlüsselung ist keine Verschlüsselung
Der Zweck von Base64 ist „jedes Byte kann in URL eingefügt werden“, nicht „nur vertrauenswürdige Personen können es lesen“. Jeder, der den Link erhält, kann ihn in der Konsole wiederherstellen:
const data = new URLSearchParams(location.hash.slice(1)).get("data");
decodeURIComponent(escape(atob(data)));
Sie können auch setzendata=Die folgende Zeichenfolge wird in diese Site geworfenBase64 Dekodierung. Es gibt kein Passwort, keinen einmaligen Link und kein Ablaufdatum.
Ein vollständiges Beispiel
Angenommen, Sie geben im „JSON-Format“ Folgendes ein:
{
"name": "Ada",
"role": "dev"
}
In eine Zeile komprimiert sind es 27 Bytes:
{"name":"Ada","role":"dev"}
UTF-8 → Base64 erhält 36 ASCII-Zeichen (es gibt keine).+ / /, wird es nicht mehr durch die Prozentzeichenkodierung gestreckt, wenn es in URL platziert wird):
eyJuYW1lIjoiQWRhIiwicm9sZSI6ImRldiJ9
Schließe Hash ab:
#tool=json-format&data=eyJuYW1lIjoiQWRhIiwicm9sZSI6ImRldiJ9
Nachdem der andere Teilnehmer es geöffnet hat und denselben Absatz JSON sieht, kann er mit der Formatierung fortfahren und dies tunJSONPath Extraktion, oder machen Sie Diff mit Ihrer eigenen Antwort. Handelt es sich beim Originaltext tatsächlich um eine kommentierte Konfiguration, sollte diese stattdessen verwendet werdenJSON5 AnalyseTeilen Sie die Ausgabe erneut, anstatt sie nicht verfügbar zu lassenJSON.parseDer Text wird direkt an die andere Partei weitergeleitet.
Die Lautstärke ist deutlicher erkennbar, wenn sie chinesische Schriftzeichen enthält. Zum Beispiel{"msg":"格式化后两边一致"}Es besteht aus 34 Bytes UTF-8, Base64 gefolgt von 48 Zeichen; wo/und=Nach der URL-Codierung beträgt der Parameterwert 54 Zeichen.
Wie lang wird der Link?
Hash Das feste Limit für die Freigabe ist nicht das „Server-Upload-Limit“;Kann der gesamte Absatz URL trotzdem an den Browser der anderen Partei gesendet werden?.
Für einen Abschnitt von JSON, der annähernd reines ASCII ist, ist die gemessene Größenordnung wie folgt (einschließlichtool=json-format&data=Länge nach der Expansion):
| Originaltext ca. | Nach der Kodierung Hash ca. | Erleben Sie Einschränkungen |
|---|---|---|
| 200 B | 330 Zeichen | Chat-Software kann fast immer vollständig geliefert werden |
| 1 KB | 1.4 KB | Die meisten IMs sind in Ordnung, es wird jedoch dennoch empfohlen, zur Bestätigung darauf zu klicken. |
| 8 KB | 11 KB | Browser können es normalerweise öffnen; Einige Clients kürzen es möglicherweise. |
| 32 KB | 44 KB | Erwarten Sie nicht, dass die WeChat-/E-Mail-Weiterleitung des Originaltexts weiterhin funktioniert |
Chrome kann eine sehr lange Adressleiste verarbeiten, es gibt jedoch noch eine weitere Ebene dazwischen: IM, E-Mail, Kurzlink-Dienste und QR-Codes. Sie haben jeweils eine kürzere Kappe und sagen selten: „Ich habe den Schwanz abgeschnitten.“ Der Prozess sollte also wie folgt aussehen:
-
1
Klicken Sie auf „Teilen“
Kopieren Sie die vollständige Adresse, kopieren Sie sie nicht einfach
#Etwas zurückgeblieben. -
2
Öffnen Sie es zunächst in einem neuen Tab auf diesem Computer
Stellen Sie sicher, dass die Tools und Eingaben vorhanden sind, bevor Sie sie an Ihre Kollegen senden.
Für das gesamte Zugriffsprotokoll und die mehrere Megabyte große Exportdatei fügen Sie diese bitte lokal ein oder klicken Sie auf „Herunterladen“. Hash Der Zweck der Freigabe besteht darin, „einen kurzen Eingabezeitraum zu reproduzieren“ und nicht als Netzwerkfestplatte.
Hash Was ist der Unterschied zwischen Teilen und anderen Methoden?
| Weg | Wohin gehen die Daten? | Wie kann die andere Partei weitermachen? | geeignet für | Nicht geeignet |
|---|---|---|---|---|
| URL Hash | Halten Sie an beiden Adressleisten an | Öffnen Sie dieselbe Website, um mit der Arbeit fortzufahren | Kleiner Absatz JSON, wiederkehrender Fehler | Schlüssel, sehr große Dateien |
| Ursprünglicher Chattext | Chat-Server | Kopieren Sie es noch einmal | Ein paar Konfigurationszeilen | Interne Daten werden in einer permanenten Sitzung aufgezeichnet |
| Screenshot | Bilder | Kann nur angezeigt, aber nicht analysiert werden | Sprechen Sie über Struktur | Muss noch mit der Formatierung fortfahren / Diff |
| Zubehör/Netzwerkfestplatte | Speicherung von Drittanbietern | Nach dem Download posten | große Dateien | Ich möchte eine weitere Kopie vermeiden |
| Online-Einfügen | Das Backend eines anderen | Kurzlink öffnen | Erfordert öffentliche und langfristige Lagerung | Alles, was diese Maschine nicht verlassen sollte |
Wenn das Team bereits über Intranet-Paste- oder Arbeitsauftragsanhänge verfügt, ist es stabiler, den ursprünglichen Kanal für große Protokollabschnitte zu verwenden. Der Wert von Hash ist:Der gleiche Link enthält sowohl „Welches Tool soll verwendet werden“ als auch „Was ist die Eingabe?“, muss die andere Partei nicht erraten, ob Sie auf Formatierung oder Verifizierung geklickt haben.
Grenzen, die bei der Nutzung beachtet werden müssen
- Link entspricht Klartext.Jeder, der die Seite öffnen kann, kann den Inhalt wiederherstellen. Geben Sie keine geheimen Schlüssel, Produktionstokens, Kundenlisten oder nicht offengelegte Schnittstellen weiter.
- Klicken Sie darauf, bevor Sie es versenden.Wenn die Chat-Software eine zu lange URL abschneidet, öffnet die andere Partei eine unvollständige Hash, die als leere Eingabe oder als Decodierungsfehler erscheint.
- Die andere Partei muss in der Lage sein, dieselbe DevBox-Site zu öffnen.Hash kann nicht separat von der Seite analysiert werden;
#Es hat keinen Sinn, den letzten Absatz in den Notizblock zu werfen. - Der Browserverlauf hinterlässt die vollständige Adresse.Der lokale Verlauf, synchronisierte Konten und die Bildschirmfreigabe sind alle sichtbar. Wenn Sie nicht auf „Teilen“ klicken und einfach das Tool wechseln, sind in Hash keine Daten vorhanden, nur um eine Kopie zu speichern.
- Erweiterungen und Debugging-Tools können gelesen werden
location.href.Lokales Computing verringert das Risiko, dass „unsere Website eine Kopie speichert“ und nicht „niemand auf diesem Computer kann sie sehen“. - „Von URL ziehen“ ist eine andere Möglichkeit.Wenn Sie die Remote-Adresse im Arbeitsbereich eingeben und auf „Pull“ klicken, sendet der Browser eine Anfrage an diese Adresse. Teilen Hash Wenn Sie es mitbringen
url=, wird die Person, die es geöffnet hat, auch diese Anfrage initiieren. Vertrauen Sie nur Quellen, die Sie selbst überprüft haben.
Wenn es um echte Privatsphäre geht, nutzen Sie Offline- oder Intranet-Tools. Dies hat nichts damit zu tun, „ob die Website über ein Anmeldefeld verfügt“.
FAQ
URL Hash Was ist Teilen?
Codieren Sie das aktuelle Tool und geben Sie es in die Adressleiste ein#hinten. Wenn die andere Partei denselben Link auf derselben Website öffnet, stellt der Browser den Inhalt lokal wieder her, ohne diese Daten als Seitenanforderung an den Server zu senden.
Ist der Datenserver in Hash sichtbar?
Bei normalen Seitenanfragen wird das Fragment nicht an den Server gesendet, und das Zugriffsprotokoll enthält normalerweise nur den Pfad. Das heißt aber nicht, dass es geheim ist: Jeder, der den vollständigen Link hat, kann es entschlüsseln.
Was ist der Unterschied zwischen Kodierung und Verschlüsselung?
Die Kodierung (hier Base64) sorgt dafür, dass der Text in URL eingefügt werden kann und jeder ihn umkehren kann. Für die Verschlüsselung ist ein Schlüssel erforderlich, ohne den sie nicht gelesen werden kann. DevBox Teilen bewirkt Ersteres.
Hash Kann das Teilen für Schlüssel oder Token verwendet werden?
Nein. Sobald der Link gesendet wurde, kann er nicht mehr zurückgenommen werden und wird weiterhin im Verlauf aufgezeichnet. Bitte geben Sie für den Schlüssel das Schlüsselverwaltungssystem Ihres Teams ein und geben Sie keine Webadressleiste ein.
Die andere Partei öffnet es leer?
Überprüfen Sie zunächst, ob URL vorhanden istdata=In der Mitte abgeschnitten; Bestätigen Sie erneut, dass Sie dieselbe DevBox-Site öffnen und nicht nur eine Kopie.#Etwas zurückgeblieben. Bitte verwenden Sie stattdessen dieses Gerät, um übergroßen Text einzufügen.
Welche Beziehung besteht zur JSON-Formatierung und -Überprüfung?
Das Teilen ist nur dafür verantwortlich, „die aktuellen Eingaben und Tools unverändert wegzunehmen“. Formatierung, Syntaxprüfung, JSON5, JSONPath, Diff werden weiterhin lokal im Browser der Gegenpartei ausgeführt. Sie müssen sich zuerst die Struktur ansehen und verwendenJSON Format;erfordert PositionierungUnexpected token, verwendenÜberprüfenoderJSON5.
Zusammenfassung
URL Hash Teilen ist im Wesentlichen:
Lokaler Toolstatus + umkehrbare Kodierung + Browserfragment wird nicht mit der Anfrage hochgeladen.
Es eignet sich zur Reproduktion eines kurzen Abschnitts von JSON oder einer Konfiguration. Es eignet sich nicht als Netzwerkfestplatte und nicht zur Übertragung von Geheimnissen. Wenn Sie es richtig verwenden, sprechen Sie und Ihre Kollegen mit derselben linken und rechten Spalte; Wenn Sie es falsch verwenden, entspricht es dem Einfügen von Klartext in eine Adresse, die jeder öffnen kann.
下一步尝试