Time () -Funktion in PHP

Ich wollte nur fragen, da ich ein Skript schreibe, und ich benutze time() als ein Salz für das, was ich mache.

Was passiert, ist, dass ich die von Server 1 gesendeten Daten auf Server 2 einsalzle. Server 2 überprüft, ob data = submitted_data + time() exakt übereinstimmt. Und ich wollte wissen, da mein Skript auf verschiedenen Servern verwendet wird, liefert die Funktion time() denselben Wert (wenn sie sich in verschiedenen Teilen der Welt befinden).

Ein Codebeispiel vom Client ist:

if($return == md5("true" . time()))

Und ein Codebeispiel, in dem, wenn die Daten, die korrekt übermittelt wurden, dies zurückgibt:

echo md5('true' . time());

Beide sind auf verschiedenen Servern in verschiedenen Teilen der Welt, aber ich wollte wissen, ob die Verwendung von time() die Art, wie mein System funktioniert, durcheinander bringt.

0
Warum nicht das Salz jede Verwendung ändern, anstatt jede Minute?
hinzugefügt der Autor Brad, Quelle
Wäre ich in der Lage, etwas wie Zeit (Stunde: Minute) zu verwenden und nicht Sekunden zu haben?
hinzugefügt der Autor Reverb, Quelle
Wie würde ich das Salz bei jeder Verwendung verändern? Beide Skripte befinden sich auf verschiedenen Servern, der eine ist der Client und der andere der Host/Master, der über alle Schalter verfügt, um den Client zu steuern.
hinzugefügt der Autor Reverb, Quelle
Ich bin sicher, da der Code davor und danach sowohl im Client- als auch im Server-Skript gesichert ist, um sicherzustellen, dass er die korrekten Daten zurückgibt. Alles was ich wissen muss ist, dass time() auf jedem Server gleich ist. Weil es von meinem localhost zu arbeiten scheint, bin ich in Australien und meinem Server in den USA. Aber ich denke, ich wäre am besten mit H: M anstelle von H: M: S?
hinzugefügt der Autor Reverb, Quelle
Ich sehe .. Ich sah Zeit() als die beste Option zu verwenden, weil ich wollte, dass ein SALT jede Minute ändert, aber den gleichen Wert auf jedem Server über die Welt zurückgibt. Ich weiß nicht, wie ich ein solches Problem lösen soll.
hinzugefügt der Autor Reverb, Quelle
Was genau versuchen Sie zu tun - Nachrichtenauthentifizierung? Sei vorsichtig . Sie sind möglicherweise anfällig für Hash-Extension-Angriffe oder ähnliches. Verwenden Sie nach Möglichkeit die Bibliothek einer anderen Person.
hinzugefügt der Autor Waleed Khan, Quelle
und wenn Sie beide Server mal synchronisiert haben, was können Sie mit der Verzögerungszeit beim Senden/Empfangen von Daten an den zweiten Server tun?
hinzugefügt der Autor revo, Quelle
Ich würde mich nicht darauf verlassen. Wenn die Uhren nicht synchron sind, erhalten Sie Fehler.
hinzugefügt der Autor andrewsi, Quelle
Sie könnten dann alle 60 Sekunden ein Problem haben. Das klingt völlig unzuverlässig für mich.
hinzugefügt der Autor Alan Piralla, Quelle
php.net/gmdate könnte eine bessere Idee sein ... aber selbst dann würde ich es nicht sagen Verlässlichkeit für jeden Server
hinzugefügt der Autor Nick, Quelle
Was lässt Sie daran denken, dass die Zeit auf zwei Rechnern immer dieselbe ist, wenn NTP nicht läuft?
hinzugefügt der Autor Reza S, Quelle

2 Antworten

Das wird nicht funktionieren, weil time() auf dem System der lokalen Uhr setzt, der so ziemlich garantiert nicht zwischen zwei Computern/Uhren synchron zu sein. Zweitens können Sie nicht garantieren, wann einem bestimmten Prozess vom Betriebssystem Zeit gegeben wird, zu laufen. daher kann ein Server Millisekunden aussetzen, einfach weil er etwas anderes intensivierte. Dann haben Sie Netzwerklatenz usw.

Dies ist ein bedeutendes Problem bei verteilten Systemen, die Dinge synchron halten müssen, ohne genau zu wissen, wann welche Aktionen stattgefunden haben. (Sollte diese Aktualisierung auf die Datenbank vor dieser stattfinden, wenn die Datenbank auf mehrere Server verteilt ist?). Aus diesem Grund sollte man sich am besten nicht auf die Zeit verlassen, sondern vielleicht auf etwas anderes, wie eine Revisionsnummer (die dann inkrementiert wird) ). Zum Beispiel:

  • Der Server sendet Daten mit der Revisions-ID = 142 (Hinweis: '142' ist in diesem Beispiel beliebig)
  • Der Client nimmt eine Änderung vor, inkrementiert die Revision und hasht diese.
  • Der Client sendet die Daten mit der Hash-Revisionsnummer an den Server.
  • Der Server inkrementiert seine eigene Revisions-ID und hasht sie. Dies sollte nun dem entsprechen, was der Client gesendet hat.
  • Wenn dies nicht der Fall ist, lehnt der Server die Daten ab.

Dadurch können Sie Zeit simulieren, ohne auf eine inkonsistente externe Ressource angewiesen zu sein.

0
hinzugefügt
Ich sehe, aber aus irgendeinem Grund mein Localhost, der ich in Australien bin und mein Server, der in den USA ist - das Skript funktioniert, aber manchmal nicht immer und immer wieder. Aber gibt es noch eine andere Option, die ich stattdessen wählen könnte von Zeit()? Gibt es einen möglichen Weg Zeit zu haben (HH: SS) HH ist Stunde und SS ist Sekunde?
hinzugefügt der Autor Reverb, Quelle
Sehen Sie meine Revision, aber beachten Sie, dass HH: SS gelegentlich auch aus dem gleichen Grund scheitern kann; angenommen, es dauert nur eine Mikrosekunde, um zu senden und zu verarbeiten, aber in dieser Zeit tickt die 'zweite' zur nächsten Sekunde?
hinzugefügt der Autor Nathaniel Ford, Quelle

Warum versuchst du nicht folgendes:

Echodatum ("Y-m-d H: i") Echozeit (Datum ("Y-m-d H: i"));

Wert der Zeit (Datum ("Y-m-d H: i")); würde sich nicht ändern, bis Sie die nächste Minute übergeben ODER Sie können "i" basierend auf Ihrer Anforderung entfernen.

Ich hoffe, das hilft.

0
hinzugefügt
Ohhh, richtig. Und wofür ist das H: ich? Und da ich anstelle der Zeit Datum verwenden würde. Ist es der gleiche Wert für jeden Server/Standort? Oder gibt es das Datum des Servers zurück, auf dem das Skript läuft?
hinzugefügt der Autor Reverb, Quelle
Wofür steht das Y m d H i? Wäre dies die beste Methode, wenn ich das Zeitsalzen verwenden würde?
hinzugefügt der Autor Reverb, Quelle
Y ist für das Jahr, m => für den Monat, d für den Tag, H => für die Stunde, i => Minute. Warum sehen Sie sich "mcrypt_create_iv" oder "mt_rand" nicht entsprechend Ihren Anforderungen an
hinzugefügt der Autor sandeep Kumar, Quelle
Es gibt das Datum des Servers zurück, auf dem das Skript ausgeführt wird.
hinzugefügt der Autor sandeep Kumar, Quelle
Obwohl ich dir nicht vorschlagen würde, etwas zu verwenden, das auf Zeit für das Salzen basiert, es sei denn, es ist die letzte Option für dich
hinzugefügt der Autor sandeep Kumar, Quelle
PHP - Deutsche Gemeinschaft
PHP - Deutsche Gemeinschaft
5 der Teilnehmer

In dieser Gruppe sprechen wir über PHP. Partner: de.switch-case.com