Hallo Forum,
ich baue als Übung um in das Thema Sicherheit reinzukommen eine Web-basierte Adressverwaltung und hätte dazu gerne eure Meinung gehört.
Umfeld: Server bei Provider mit MYSQL, Perl, PHP, Linux, Apache. Als Protokoll geht leider nur http.
Ansatz:
-------
Client: JavaApplet
Server: PHP-Skript
DB dahinter: MYSQL
Applet bekommt Usereingabe
- Verschlüsselung mit Blowfish
- Umwandeln in Base64 (nur zwecks einfacherem Handling wegen NULL)
- Übertragung zum Server
- Speicherung in DB
Umgekehrt beim Lesen wird Base64 dekodiert und dann wieder mit Blowfish entschlüsselt (alles im lokalen Applet).
Tabelle sieht dabei so aus:
ID (integer)
data (mediumtext)
Somit bin ich sicher vor dem lokalen Browser-Cache und die Leitung ist auch sicher und selbst wenn jemand an die DB rankommen sollte kann er die Daten zwar zerstören aber nicht lesen. Es bleibt aber ein Problem:
Auf dem Server gibt es logischerweise ein öffentliches PHP-Skript mit folgenden Funktionen:
-gib größte ID (wäre mir egal)
-gib alle Records (wäre mir egal, kann ja keiner was mit anfangen)
-füge neuen Record an (passt mir schon nicht mehr so da dies ja Schrottdaten wären)
-lösche Record mit ID (passt mir überhaupt nicht)
Einfach wäre natürlich das PHP-Skript per .htaccess zu schützen dann muss das Applet sich anmelden aber das ist natürlich wieder "unsecure" wegen dem cleartext Passwort das über die Leitung geht. Alternativ hätte ich noch die Idee:
- ein Client sagt zum Server erstmal HELLO
- der Server schickt eine zufällige Zeichenkette zurück und speichert sich diese mit der Session-ID in einer DB
- der Client wird diese Zeichenfolge dann mit einem Kennwort verschlüsseln (Blowfish) und zurückschicken
- Der Server führt auf seine Zeichenfolge die gleiche Verschlüsselung durch und bei Übereinstimmung wird der DB-Eintrag als "VALID" gekennzeichnet und in der DB mit einem Timestamp versehen. Bei jedem Aufruf wird dann geprüft ob die Session-ID mit einer VALID Session übereinstimmt und ob die Zeit vom letzten Zugriff nicht länger als x Minuten her ist. Falls ok wird der aktuelle Timestamp reingeschrieben. Falls nicht ok liefert das Skript nur eine Fehlermeldung als Response zurück.
Anmerkungen? Denkfehler? Verbesserung?
Jede Kritik und jeder Verbesserungsvorschlag sind gerne willkommen.
Ciao
Thomas Grötzner
Signatur? Was ist das?