Vielen Dank!
Hallo,
Diese Panik, muss ich zugeben, verunsichert mich ein wenig,
deswegen wollte ich mal Eure Meinung hören wie Ihr das angehen
würdet. Mein Vorschlag wäre einfach https und PHP, Passworte in
MySQL. Alles andere wird aufwendiger und teurer. Oder spricht
da was dagegen.
Vom Konzept her ist das sicherlich eine gute Idee. HTTPS mit 128bit-Verschlüsselung ist so gut wie abhörsicher (naja - der Aufwand wäre so groß und es würde so lange dauern, dass sich die betreffende Person den Download warscheinlich 100mal kaufen können *g*) Ob Du jetzt PHP oder Perl, MySQL oder PostgreSQL oder flat files nimmst, ist egal. Worauf es ankommt: Du musst Die Scripte sicher programmieren.
Daher:
- Passwörter mindestens 8 Zeichen lang (sonst lohnt sich evtl. noch eine Brute-Force-Attacke)
- _ALLE_ Benutzereingaben müssen validiert werden
- Übergebe niemals wichtige Informationen für das Script an den User
- Security through obscurity does not work - mach' dein System so sicher, dass selbst wenn er DB-Struktur (aber nicht Inhalt) und Script-Quelltext kennt, er es trotzdem nicht knacken könnte
- Sei noch paranoischer als Dein Auftraggeber und überlege Dir, an welchen stellen ein Einbrecher Angriffsmöglichkeiten hätte
- Lieber einmal zuviel die Rechte überprüft, als einmal zu wenig.
- Speziell zu Dir: Speichere die Downloads außerhalb des DocumentRoots und arbeite mit fpassthru(), sobald die Rechteüberprüfung fertig ist.
- Wenn Du PHP nimmst, dann nimm mindestens 4.2.3 - alles andere hat Sicherheitslücken
- Verzichte bei PHP auf register_globals, damit Du immer genau weißt, woher die Variable kommt
- Wieder PHP: Nimm $_SESSION statt session_(un|is)register(ed), letztere sind ein Krampf bei register_globals = off
Zu 3: Der Punkt ist etwas "unscharf" beschrieben, daher jetzt ein Beispiel: Wenn Du z.B. verschiedene Dateien include()en willst, je nachdem, was der User machen will, dann übergib' niemals den Dateinamen in der URI oder im Formular. Du könntest diesen zwar überprüfen, aber das ist mühsehlig. Speichere den Dateinamen lieber irgendwo ab und ordne ihm eine ID zu (entweder Array oder DB, je nachdem, ob es statisch oder dynamisch ist) und übergebe diese ID.
Grüße,
Christian