Merke: Jeder Schutz, der darauf basiert, Daten außerhalb des Servers zu speichern, ist für sich alleine genommen ein Witz.
was haben cookies mit sessions zu tun?
Überlege Dir mal, wie ein Server zuverlässig erkennen soll, daß ein Browser gerade $_SESSION in Benutzung hat. Sowas geht nur, indem der Server dem Browser eine eindeutige Kennung verpasst ("Session-ID") - und die wird entweder per Cookie oder per URL vergeben.
Die zweite Möglichkeit wäre, die Daten nicht auf dem Server (wie es mit $_SESSION geschieht), sondern im Browser zu speichern. Auch dazu brauchst Du Cookies.
Was immer Du davon probierst, es bedeutet jedesmal, daß Du wichtige Daten außerhalb des Servers beim Feind lagerst und läuft somit in jedem Fall auf folgendes hinaus:
Wenn Du in $_SESSION (oder in $_COOKIE) den Status "hat sich registriert" speicherst, brauche ich nur das Zurücksenden dieser Kennung unterbinden und schon bin ich wieder ein Unbekannter, nicht registriert. Keine Kennung, kein $_SESSION, kein Status.
Es gibt keinen anderen Weg, einen Browser und damit die mit ihm verbundene Sitzung von einer Anfrage an den Server zur nächsten eindeutig wieder zu erkennen.
welcher schutz ist perfekt? welchen würdest du anwenden?
Ernsthaft:
Ich weiß nicht, was Du alles je angemeldetem Benutzer speicherst, aber IMHO ist es ein Witz, wenn jemand versucht, mit massenhaften Registrierungen eine Datenbank in die Knie zu zwingen. Da gibt es feinere Methoden, mit denen man gleich den ganzen Server lahmlegen kann.
Weiterhin wird sich Datenmüll, in diesem Fall "tote" Benutzer, so oder so mit der Zeit ansammeln. Es gibt reichlich Leute, die sich einmal anmelden und nie wieder kommen, entweder weil sie nur kurz was gucken wollten oder weil sie enttäuscht sind. Bei anderen lässt das Interesse vielleicht nach dem zehnten oder hundertsten Besuch nach, der Effekt ist der gleiche.
Und es stellt sich die Frage, mit wieviel Millionen Besuchern Du denn so über den Daumen rechnest, daß Du Angst hast, ein paar hundert Scherzanmeldungen könnten alles zusammenbrechen lassen.
Überhaupt: Wer sollte sich denn allen Ernstes die Mühe machen, Dich mit Anmeldungen zuzumüllen? Nicht, daß ich die Qualität Deines Projektes heruntereden möchte, aber mir kommt das irgendwie doch recht...amüsant vor, das hat schon was von Verfolgungswahn :> Du solltest Dir über ein paar halbstarke Wichtel keine Gedanken machen, lass' sie einfach ins Leere laufen, nimm' die Anmeldungen an und entferne sie später stillschweigend. Ein Angriff, der keinen Schaden hinterlässt, macht keinen Spaß. Ein Angriff, der überhaupt nichts, nicht mal eine Notiz, hinterlässt, ist frustrierend.
Soviel zur technischen und verwalterischen Seite. Zum zweiten finde ich persönlich Seiten, auf denen man sich erst anmelden muß, generell blöd, weil es erstens umständlich ist, zweitens schon genug Mißbrauch mit meinen persönlichen Daten getrieben wird und ich drittens gerne unabhängig (nicht unbedingt anonym) bleibe. Insofern unterlasse ich als Serverbetreiber diesen ganzen Anmeldequatsch grundsätzlich. Es gibt zwar Ausnahmen, aber die beiden häufigsten Anwendungen zählen nicht dazu:
- Personalisierte Seiten kann man auch realisieren, indem man die jeweiligen Wünsche direkt in einem Cookie speichert. Damit fällt auch gleich der komplette Aufwand für die serverseitige Datenverwaltung weg - ganz zu schweigen von Karteileichen, die können gar nicht erst entstehen, wenn es keine Kartei gibt.
- Eine Anmeldung in Foren oder Boards ersetzt eine fähige Moderation in keinster Weise. Das es auch problemlos ohne geht, siehst Du an diesem Forum.
Aber wenn Du Dich wirklich so fürchtest:
ip speichern?
Das schrieb ich ja bereits: In einer gesonderten Datei die Adressen der Rechner speichern, von denen aus in den letzten drei Minuten eine Anmeldung erfolgt ist. Das reicht, um jedem 12-jährigen Spielkind schon beim zweiten "Stör"-Versuch die Lust zu nehmen, und ist gleichzeitig so knapp bemessen, daß es keine Probleme mit dynamischen Adressen geben sollte (wohlgemerkt: sollte..).
Noch besser, allerdings etwas aufwändiger: Die Speicherung der Mail-Adresse mit gleichzeitigem Zwang zur Bestätigung des Empfangs einer Testnachricht (entweder durch Zurücksenden der Nachricht oder -einfacher- durch Anklicken/Eingeben des zugesandten Aktivierungscodes, also einer Zufallszahl).
Gruß,
soenk.e