Frage

Ich werde einige Daten von einer Website auf eine andere Website zu veröffentlichen. Ich muß einen Weg für den Empfang Website sicher sein, dass die Daten von der Sende Website gesendet wurden und nicht durch ein anderen böswilligen Benutzer gesendet. Ich bin mit PHP4.

Wie kann ich das tun?

Danke!

War es hilfreich?

Lösung

Für eine PHP-only Lösung:

Wenn Sie ein Geheimnis für sich behalten kann (an beiden Enden), dann können Sie eine Selbst implementiert verwenden Variante (ja, eine Variante) von Keyed-Hash Message Authentication Code (HMAC oder KHMAC).

Das Konzept ist, dass, wenn Sie das gleiche Geheimnis an beiden Enden haben, können Sie Hash können (Meldung + geheim) auf dem sendenden Ende, und Hash (Meldung + geheim) auf dem recieving Ende. Wenn die Hash-Werte übereinstimmen, dann haben Sie eine gültige Nachricht.

Das Geheimnis ist der Schlüssel (Wortspiel beabsichtigt). Denn ohne das Geheimnis ist es nicht machbar, dass ein Angreifer die Nachricht verändern könnte und einen neuen Hash zu erzeugen, die auf der Empfängerseite überprüfen werden.

Hier ist ein Beispiel PHP-Code:

// On the sending end:
define('SECRET', '12734981273912379128739128739127938794729327492');
$message = 'your-message';
$packet = $message . sha1($message . SECRET);

// On the receiving end:
define('SECRET', '12734981273912379128739128739127938794729327492');
$message = substr($packet, 0, -40);
if(sha1($message . SECRET) != substr($packet, -40))
    throw new Exception("Message Authentication failed!")
else
    do_something_with($message);

Wenn Sie zusätzliche Sicherheit von einem Hacker erneut veröffentlicht die gleiche Botschaft wollen Sie eine zufällige Anforderungskennung auf jede Anforderung hinzufügen könnten, und stellen Sie sicher, dass die gleiche Hash nie akzeptiert wird.

Disclaimer: Diese wie bei allen sensiblen Sicherheitscode sollte mit sensiblen Daten vertrauenswürdig überprüft und verifiziert werden Peer, bevor sie. Habe durch Forschung zum Thema, oder besser noch, verwenden Sie eine vorhandene Bibliothek, die diese Art der Überprüfung Griffe + Authentifizierung.

Andere Tipps

Verwenden Sie einfach Zweiweg-ssl. Der Client authentifiziert sich beim Server mit einem SSL-Zertifikat nicht nur umgekehrt.

So der Server weiß, es ist der richtige Client er das Datenformular wird.

Der Kunde weiß, dass er die Daten an den richtigen Server sendet

Jitter-Lösung (bidirektionale SSL) arbeitet. Allerdings ist eine möglicherweise einfache Weise Einweg SSL (authentifizieren Empfangsserver) und Basic Auth zu verwenden. SSL bietet Vertraulichkeit und Basic Auth authentifiziert den Client.

Ich würde schauen in mit GnuPG: http://devzone.zend.com/article/1265

Meine Stimme ist für SSL, aber als Alternative.

Wenn beide Seiten wissen einen geheimen Schlüssel (SK) dann,

  1. website1 (WS1) kann Website2 (WS 2) eine Nonce (N1)
  2. senden
  3. WS2 kann eine Nachricht senden WS1, die enthält:
    • die Daten (verschlüsselt werden, um den geheimen Schlüssel)
    • md5 (SK. N1) (das heißt der Beweis, dass WS2 weiß SK)
    • md5 (SK. Daten) (das heißt Beweis dafür, dass die Daten nicht von Dritten
    • manipuliert wurde
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top