Eintrag-Details: Datenmanipulation verhindern durch MD5

30.01.2006

Datenmanipulation verhindern durch MD5

Ein Problem, das bei Internetanwendungen immer wieder auftaucht, ist die mögliche Manipulation von Daten, wenn diese über mehrere Domains übertragen werden müssen. Im eigenen Skript kann man schließlich auf PHP-Sessions ausweichen, wobei die Daten dann intern auf dem Webserver gespeichert werden und vor Manipulation von Außen weitgehend geschützt sind.

[Mehr:]

Müssen jedoch Daten über Domaingrenzen hinweg transportiert werden, zum Beispiel um Beträge und Kontonummern für eine Online-Zahlungsabwicklung zu übertragen, hilft diese Lösung nicht mehr, da sich die Seiten auf unterschiedlichen Rechnern befinden.

Advertisement/Werbung
Ein Beispiel soll dies deutlich machen:

Der Betreiber eines Online-Shops "mein-shop.de" hat mit seiner Bank "meine-bank.de" die Online-Abrechnung von Lastschriften und Kreditkarten vereinbart. Dazu muss für jede Buchung eine entsprechende Seite abgerufen werden. Die Bankdaten und der Zahlbetrag werden dabei über Hidden-Felder in einem Formular übertragen. Solche Hidden-Felder lassen sich jedoch mit etwas Geschick manipulieren, so dass ein Kunde des Online-Shops beispielsweise den Betrag verändert könnte. Es ist also wichtig, dass tatsächlich die Originaldaten bei der Bank ankommen.

Um dies zu erreichen gibt es ein recht einfaches und dennoch sicheres Verfahren. Alle Daten, die nicht manipuliert werden dürfen, werden in eine Zeichenkette gepackt. Dazu kommt noch ein geheimes Wort, dass nur dem Betreiber des Shops und dem Webserver der Bank bekannt ist. Diese Zeichenkette wird nun über die MD5-Funktion in einen MD5-Hashwert umgewandelt, der ebenfalls an den Rechner der Bank geschickt wird.

Die Bank ihrerseits prüft mit einem eigenen Skript, ob die zusammengesetzte Zeichenkette mit dem geheimen Wort den gleichen MD5-Hash ergeben. Ist das nicht der Fall, wurde mindestens eines der übergebenen Daten unzulässig verändert.

Advertisement/Werbung
Damit das Verfahren funktioniert, müssen auf beiden Seiten folgende Informationen vorhanden sein:

  • Aus welchen Daten wird die Zeichenkette zusammengesetzt?
  • Wie lautet das geheime Wort, und wo erscheint es in der Zeichenkette?

Zwei kleine Beispiel-Skripte sollen das verdeutlichen. Das Skript "shop.php" soll den Zahlungsvorgang im Online-Shop darstellen. Die Daten für $konto wurden vom Kunden eingegeben, der Endbetrag in $betrag wurde aufgrund des Warenkorb-Inhaltes vom Skript errechnet. Das geheime Wort in $geheimwort könnte in einer Konfigurationsdatei oder in der Datenbank stehen und ist im HTML-Code im Browser natürlich nicht sichtbar.

Die Variablen für $konto und $betrag werden über hidden-Felder an die Bank übertragen. Der erzeugte MD5-Wert, ist aus diesen Daten und dem Geheimwort gebildet worden. Auch dieser Wert erscheint als hidden-Feld. Da man aus einem MD5-Wert nicht wieder die ursprüngliche Zeichenkette errechnen kann, kann man diesen Wert bedenkenlos auch als hidden-Feld übertragen.

Das Skript der Bank wird über die URL in $bank_url aufgerufen. Zum Testen kann dies auch der eigene (lokale) Webserver sein. Die beiden Daten für Kontonummer und Betrag werden nun aus der Variable $_POST ausgelesen und genauso wie beim Sender mit dem Geheimwort als Zeichenkette verbunden. Auch daraus wird ein MD5-Wert errechnet. Nur wenn der übertragene MD5-Wert mit dem intern errechneten übereinstimmt, waren alle in der MD5-Zeichenkette enthaltenen Daten gleich und eine Manipulation kann ausgeschlossen werden.

In dem Beispiel wäre der Inhalt der Zeichenkette:

1234 567898.56geheim

wobei "1234 5678" der Kontonummer entspricht. "98.56" ist der Betrag und "geheim" das geheime Wort. Daraus macht MD5 die folgende Zeichenkette:

4fa93206b9a7bf5b34c60ad310d54478

Man kann sich diese Daten natürlich im Beispielskript anzeigen lassen, um das Prinzip besser zu verstehen. Das wäre in der endgültigen Anwendung natürlich keine gute Idee, da das geheime Wort dann ja sichtbar würde.

Das MD5-Verfahren ist nicht in der Länge der Zeichenkette begrenzt, daher wird es auch gern verwendet, um einen "Fingerabdruck" für ganze Programmdateien zu erstellen. Theoretisch wäre es allerdings möglich, dass unterschiedliche Zeichenketten den gleichen MD5-Wert haben können. Die Wahrscheinlichkeit, dies für Manipulationen nutzen zu können ist jedoch verschwindend gering.

Hinweis: Diesen Text und die enthaltenen Beispielprogramme und Skripte dürfen Sie zum Erlernen der einzelnen Techniken und auch als Grundlage für Ihre eigenen Projekte auf eigene Gefahr kostenlos nutzen.

Bitte denken Sie daran, dass alle Texte und Quellcodes trotzdem urheberrechtlich geschützt sind. Eine direkte Weitergabe ist nur nach ausdrücklicher schriftlicher Genehmigung gestattet.

Permalink 30.01.2006 10:15:41, von Marian eMail , 697 Wörter, 4108 mal angeschaut   German (DE) Kategorien: PHP

Kommentare, Pingbacks:

Kommentar von: S. Fernandes [Besucher]
Hallo. Ich bin Schülerin und muss mich mit der Datenmanipulation befassen und ihre Seite war sehr hilfreich. Ich wollte fragen ob ich Inhalte daraus verwenden darf da die Texte und Quellcodes ja geschützt sind? Ich würde mich über eine positive Antwort sehr freuen. (fernandes.bina@gmail.com) Mit freundlichen Grüßen S.Fernandes
Permalink 11.01.2008 @ 10:21

Kommentar schreiben:

Ihre E-Mail-Adresse wird nicht angezeigt.
Ihre URL wird angezeigt.
Antispam-Feld
Erlaubte XHTML Tags: <p, ul, ol, li, dl, dt, dd, address, blockquote, ins, del, span, bdo, br, em, strong, dfn, code, samp, kdb, var, cite, abbr, acronym, q, sub, sup, tt, i, b, big, small>
Optionen:
 
(Zeilenumbrüche werden zu <br />)
(Setze Cookies für Name, eMail & URL)

Werbung

Online-Kurse

  • Bequem PHP lernen bei freier Zeiteinteilung von zuhause
  • Der Onlinekurs den jeder versteht
  • www.lernpilot.de/wbt/

Konnte ich helfen?

mehr Werbung

buy viagra online|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66| levitra overdose effects levitra overdose symptoms which is stronger levitra or viagra cialis levitra or viagra levitra or viagra which is better levitra interactions alcohol levitra uk side effects levitra uk online generic levitra uk levitra use for women levitra use instructions levitra user group levitra tabs 20mg levitra trial coupon levitra time effectiveness levitra time frame levitra ratings and reviews levitra effects viagra levitra effects use levitra effects forum levitra effects liver levitra effects women levitra effectiveness reviews levitra women effect standard levitra dose levitra generic medication levitra generic viagra levitra generic cheap levitra generic drug levitra generic available