Die Website, an der ich gerade arbeite, möchte ihre eigenen verkürzten URLs generieren, anstatt sich auf eine Drittpartei wie tinyurl oder bit.ly zu verlassen.URL-Kürzung: Verwenden von Inode als Kurzname?
Offensichtlich konnte ich eine laufende neue URLs zählen, wie sie auf der Website hinzugefügt werden und diese verwenden, um die kurzen URLs zu generieren. Aber ich versuche das zu vermeiden, wenn es möglich ist, denn es scheint eine Menge Arbeit zu sein, nur um diese eine Sache funktionieren zu lassen.
Da die Dinge, die kurze URLs benötigen, alle realen physischen Dateien auf dem Webserver sind, ist meine derzeitige Lösung, ihre Inode-Nummern zu verwenden, da diese bereits für mich bereit generiert werden und garantiert einzigartig sind.
function short_name($file) {
$ino = @fileinode($file);
$s = base_convert($ino, 10, 36);
return $s;
}
Dies scheint zu funktionieren. Frage ist, was kann ich tun, um die kurze URL noch kürzer zu machen?
Auf dem System, auf dem dies verwendet wird, befinden sich die Inodes für neu hinzugefügte Dateien in einem Bereich, in dem die obige Funktion eine 7 Zeichen lange Zeichenfolge zurückgibt.
Kann ich sicher einige (Hälfte?) Der Bits des Inode wegwerfen? Und wenn ja, sollten es die hohen oder die niedrigen Bits sein?
Ich dachte an die Verwendung des crc32 des Dateinamens, aber das macht meine kurzen Namen tatsächlich länger als mit dem inode.
Hätte so etwas Kollisionsgefahr? Ich war in der Lage, zu einzelnen Ziffern zu gehen, indem ich den richtigen Wert von "$ Referencefile" wählte.
function short_name($file) {
$ino = @fileinode($file);
// arbitrarily selected pre-existing file,
// as all newer files will have higher inodes
$ino = $ino - @fileinode($referencefile);
$s = base_convert($ino, 10, 36);
return $s;
}
Guter Punkt. Ein wichtiger Aspekt von URIs ist, dass sie sich nie ändern sollten - http://www.w3.org/Provider/Style/URI - und dies würde sie verletzen. – ceejayoz
Ein weiteres Risiko besteht darin, unbeabsichtigt Zugriff auf Daten zu gewähren, die Sie nicht erwarten. Nehmen wir zum Beispiel an, dass der Benutzer inode 17 anfordert, und das ist zufällig/etc/shadow (oder sie fordern 1111 an, was zufällig eine Verbindung zu/etc/shadow ist). Sie müssen zusätzliche Prüfungen durchführen, um sicherzustellen, dass sich die Datei in dem Verzeichnis befindet, in dem Sie sie erwarten, und es ist möglicherweise nicht ganz trivial ... – atk