Wie generiert medium.com (z. B.) den URL-Fragmenthash?

736
Inactivist

Hat jemand die Skripts oder Techniken identifiziert, die von medium.com (oder einer anderen beliebten Website) verwendet werden, um nach dem URL-Fragment einen eindeutigen Hashwert zu generieren?

Gedachtes Beispiel: #.lfr25xei4

Sie ändern sich mit jeder Aktualisierung der Seite (zumindest in meiner Erfahrung).

(Ich überlegte, ob ich dies beim Stack Overflow fragen würde, aber ich bin mir nicht sicher, ob es dort hingehört.)

4

1 Antwort auf die Frage

3
piotr.d

Ich weiß, es ist einige Monate vergangen, seit diese Frage veröffentlicht wurde, aber ich interessierte mich für dasselbe und hier sind meine Ergebnisse.

Der Hash wird clientseitig in Javascript generiert und basiert auf dem aktuellen Zeitstempel. Der Code sieht so aus:

hash = generateHash().substr(0, 9)  generateHash = function() { return Math.floor(2147483648 * Math.random()).toString(36) +  Math.abs(Math.floor(2147483648 * Math.random()) ^ (0, getTimestamp)()).toString(36) }  getTimestamp = Date.now || function() { return +new Date } 

(Funktionen wurden aus Gründen der Übersichtlichkeit umbenannt)

Sind Sie zu 100% sicher, dass es sich ausschließlich um Zeitstempel handelt? Ich habe kürzlich eine Antwort zu Instagram-Medien-IDs (http://stackoverflow.com/a/40826963/117259) veröffentlicht und festgestellt, dass eine rein datumsbasierte ID möglicherweise zu "Kollisionen" mit anderen Personen führt, die zur selben Zeit posten . Das heißt, die Sicherheitswette bei der Erstellung eines ID-Schemas ist die Kombination von Zeitstempel und Benutzername. JakeGould vor 7 Jahren 0
@JakeGould bitte den Code anschauen. Das benutzen sie. Hash wird durch zwei `Math.random ()` s und eine XOR-Operation mit aktuellem Zeitstempel generiert. Die Chance einer "Kollision" ist lächerlich gering. piotr.d vor 7 Jahren 1
Was ist der Sinn des zufälligen Hashes? Ich finde es wirklich nervig. Ich kann nicht erkennen, ob ich bereits eine Seite mit einem Lesezeichen versehen habe, es sei denn, ich ersetze den Hash durch etwas Konstantes, z. B. `# nada`. Da es sich um ein URL-Fragment handelt, wird es vom Server nie angezeigt. Daher muss es in XHR-API-Aufrufen verwendet werden. Ich nahm an, dass es für das Referrer-Tracking war, aber das macht auch keinen Sinn ... Inactivist vor 7 Jahren 1
Es ist nervig und ich schneide auch die Anker aus. Der Server sieht es, weil der JS es in einigen Ajax-Anfragen sendet. Ich habe es zum Beispiel in "https: //medium.com / _ / batch" gefunden, also bin ich mehr als sicher, dass es verwendet wird, um zu verfolgen, wer welche URL freigegeben hat, und so einen Verweisbaum erkennen kann. Wenn Ihre ursprüngliche Frage damit beantwortet wird, akzeptieren Sie die Antwort. Vielen Dank. piotr.d vor 7 Jahren 1