Die Uniqid -Funktion ist eine der integrierten Funktionen in PHP, mit der eine eindeutige ID basierend auf der aktuellen Zeit generiert wird. Seine Syntax ist wie folgt:
<span><span><span class="hljs-title function_ invoke__">uniqid</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$prefix</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$more_entropy</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>
</span></span>
$ Präfix : Ein optionaler String -Parameter, der der generierten eindeutigen ID vorangestellt wird.
$ more_entropy : boolescher Wert, bestimmt, ob zufällige Zeichen an die generierte ID angehängt werden sollen, die Komplexität erhöht, standardmäßig auf False .
Die Art und Weise, wie Uniqid generiert wird, basiert auf dem aktuellen Zeitstempel (Mikrosekunden), der eine hohe Genauigkeit aufweist, sodass die generierte ID in den meisten Fällen eindeutig ist. Aufrufen von Uniqid () erhält beispielsweise eine ID ähnlich wie 5F5D5E5C8F1A7 .
Obwohl Uniqid eindeutige Werte erzeugt, die auf der aktuellen Zeit basieren, ist es nicht sehr sicher. Da die Zeitstempel nacheinander wachsen, kann die generierte ID mehrmals gleichzeitig aufgerufen werden, wenn Uniqid mehrmals aufgerufen wird, kann die generierte ID dieselbe sein. Darüber hinaus basiert die von Uniqid standardmäßig generierte ID auf Zeitstempeln. Wenn der Angreifer also die Reihenfolge vorhersagen kann, in der Zeitstempel wachsen, ist die generierte ID leicht zu erraten.
MT_RAND ist ein Pseudo-Random-Zahlengenerator in PHP. Im Vergleich zur Rand -Funktion ist MT_RAND effizienter und erzeugt eine zufällige Zahl von höherer Qualität. Die Syntax ist wie folgt:
<span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$min</span></span><span> = PHP_INT_MIN, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$max</span></span><span> = PHP_INT_MAX): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>
$ min : Der Mindestwert der generierten Zufallszahl ist standardmäßig PHP_INT_MIN .
$ max : Der Maximalwert der generierten Zufallszahl ist standardmäßig PHP_INT_MAX .
MT_RAND gibt eine zufällige Ganzzahl innerhalb des angegebenen Bereichs zurück, der Pseudo-Random ist, aber für die allgemeinen Zufallszahlanforderungen ausreicht.
Obwohl MT_RAND sehr zufällig ist, ist es immer noch Pseudo-Random und keine kryptografisch sichere Zufallszahl. Wenn die generierte ID von hoher Sicherheit (z. B. Verhinderung von Vermutungen und Kollisionen) sein muss, ist dies möglicherweise nicht sicher genug.
Um die Sicherheit der Generierung einzigartiger IDs zu verbessern, können Uniqid und MT_RAND zusammen verwendet werden. Dies stellt sicher, dass die generierte ID dem Zeitstempel Zufälligkeit verleiht, was die Schwierigkeit von Kollisionen verbessert.
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">generateSecureId</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$prefix</span></span></span><span> = </span><span><span class="hljs-string">""</span></span><span>) {
</span><span><span class="hljs-comment">// Erzeugen Sie eindeutige zeitbasierte ID</span></span><span>
</span><span><span class="hljs-variable">$uniqid</span></span><span> = </span><span><span class="hljs-title function_ invoke__">uniqid</span></span><span>(</span><span><span class="hljs-variable">$prefix</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-comment">// Im einzigen ID Eine Zufallszahl anhängen</span></span><span>
</span><span><span class="hljs-variable">$randomNumber</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>(</span><span><span class="hljs-number">100000</span></span><span>, </span><span><span class="hljs-number">999999</span></span><span>);
</span><span><span class="hljs-comment">// Einzigartig durch Spleißen erzeugt ID und zufällige Zahlen</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$uniqid</span></span><span> . </span><span><span class="hljs-variable">$randomNumber</span></span><span>;
}
</span></span>
<span><span><span class="hljs-variable">$secureId</span></span><span> = </span><span><span class="hljs-title function_ invoke__">generateSecureId</span></span><span>(</span><span><span class="hljs-string">"order_"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$secureId</span></span><span>;
</span></span>
Die Ausgabe könnte so aussehen:
<span><span>order_60d17e5c5f1b4.829278031116635204001234
</span></span>
In der obigen Methode generiert die Uniqid -Funktion einen eindeutigen Teil, der auf der Zeit basiert, während MT_RAND eine hochwertige Pseudo-Random-Nummer hinzufügt. Die kombinierte ID ist schwieriger vorherzusagen, was nicht nur die Einzigartigkeit des Zeitstempels sicherstellt, sondern vermeidet auch das Problem, mehrere identische IDs gleichzeitig zu generieren.
Erhöhung zufällig : Die von Uniqid basierende ID basierend auf Zeitstempeln hat eine bestimmte Reihenfolge und kann von Angreifern spekuliert werden. Die durch MT_RAND generierten Zufallszahlen erhöhen die Unvorhersehbarkeit und erschweren die IDs.
Kollisionen vorbeugen : Verwenden Sie Uniqid allein, wenn der Zeitunterschied zwischen der Generierung von IDs sehr gering ist, können Kollisionen auftreten (dh die generierte ID ist gleich). Die Einführung von MT_RAND fügt zufällige Faktoren hinzu und verringert effektiv die Kollisionswahrscheinlichkeit.
Sicherheit verbessern : In einigen Szenarien (z. B. Zahlungssystemen, Benutzerüberprüfung usw.) können IDs sensible Informationen beinhalten oder verhindert werden müssen, dass er vermutet wird. Wenn Sie sich ausschließlich auf Uniqid verlassen, besteht möglicherweise Sicherheitsrisiken, und die generierte ID ist nach dem Hinzufügen von MT_RAND -Zufallszahlen noch unvorhersehbarer.