Mehrfachaufrufe verhindern

kourty

Mitglied
Hallo!
ich entwickele gerade eine kleine session-basierte Community, in der man unter anderem Freundschaftsafragen versenden kann. Die ID des eingeloggten Users wird in einer Session-Variable gespeichert, die ID des anderen Users wird mittels GET an das ausführende Skript übergeben. Das funktioniert auch alles super, ich möchte aber verhindern, dass jemand an alle Freundschaftseinladungen verschickt, zb. zwecks SPAM. Captchas gingen natürlich, fände ich aber wegen der Benutzerunfreundlichkeit schlecht. Ich habe mir zwei Lösungsmöglichkeiten ausgedacht und möchte nun gerne eure Meinungen, Verbesserungen, neuen Idees usw. hören!

1. mysql-Datenbank
In einer Tabelle wird das letzte Datum einer Freundschaftsanfrage gespeichert und eine weitere vehindert, wenn vor <1sec schon eine gemacht wurde. Leider keine gute Performance denke ich mal!

2. Session Variable
Dasselbe wie 1, nur dass das Datum in einer Session-Variable wie "lastfriendrequest" gespeichert wird.

Habt ihr bessere Ideen? Über jede Anregung freue ich mich!
 
Hallo,
die Methode mit der Datenbank ist die sicherste, das sollte mit der Performance keine Problem geben ;)
So eine einfache Abfrage, stellen auch in größeren Mengen keine großartige Herausforderung für den Server dar.

Anderst ist es, wenn dich jemand gezielt damit versucht "down" zu bekommen, du könntest machen, dass nach X Freundschaftsanfragen innerhalb einer bestimmten Zeit ein Captcha notwendig wird.

BTW:
Solche Systeme die zeigen, ob eine Benutzer momentan online ist, arbeiten fast alle mit einer Datenbank, die fast ständig Anfragen bekommt, nur um zu prüfen ob der Benutzer in letzter Zeit eine Aktion durchgeführt hat ;)
 
Ich kann m0dpad nur zustimmen,

würde das mit der Datenbank machen, speicher dir einfach nach jedem versenden den aktuellen Timestamp in einer Tabelle.

Sobald ein User wieder eine Message versenden möchte wird geprüft ob der timestamp kleiner wie aktueller Timestamp - 10 Sekunden z.b ist. Natürlich nur ein vorschlag wie du das prüfen kannst;).
 
So schlecht wäre doch aber die SESSION Lösung auch nicht.

Du könntest den "Anfrage Button" in einen IF-Block packen der prüft ob innerhalb eine bestimmten Zeit bereis eine Anfrage verschickt wurde oder nicht und ihn nur ausgeben wenn z.B > 10 Sekunden oder so.
 
Inwiefern ist die Datenbanklösung sicherer als die mit der SESSION-Variable? Die lässt sich doch soweit ich weiß auch nicht knacken, oder? SESSION wäre nämlich einfacher zu lösen :D
 
Naja indem Fall könnte man es in eine SESSION packen, aber ich bin bissl davon abgeneigt solche Variablen global zur Verfügung zu haben, wenn man sie nur an 1-3 Stellen maximal brauchen kann.
 
Hallo,
die Sessiondaten auf dem Server können normalerweise nicht manipuliert werden, jedoch wird die SessionID im Cookie gespeichert (oder GET Parameter was aber in fast allen Fällen viel unsicherer ist), wenn der Benutzer jetzt das Cookie löscht, kann er auch nicht mehr einer bestimmten Session zugeordnet werden.

Kann natürlich sein, dass dann auch der Login futsch ist und er so oder so keine Anfragen mehr senden kann ;)
 
Hallo,
die Sessiondaten auf dem Server können normalerweise nicht manipuliert werden, jedoch wird die SessionID im Cookie gespeichert (oder GET Parameter was aber in fast allen Fällen viel unsicherer ist), wenn der Benutzer jetzt das Cookie löscht, kann er auch nicht mehr einer bestimmten Session zugeordnet werden.

Kann natürlich sein, dass dann auch der Login futsch ist und er so oder so keine Anfragen mehr senden kann ;)

Warum sollte ein Cookie sicherer sein, als die ID über Get-Parameter?

Besser wäre es, wenn man die Session-ID auf dem Server speichert, generiert aus ein paar Infos aus dem Browser, die eindeutig sind. Dann wäre es ratsam, Session-Cookies komplett abzuschalten:

php_flag session.use_cookies 0

Z.B: Informationen aus http://php.net/manual/de/function.get-browser.php Plus die Remote-IP.

- Sobald sich die IP ändert, ist die Session halt abgelaufen.
- Sobald man den Browser wechselt, ist die Session nicht mehr gültig. => entspricht dem gleichen Verhalten wie mit Cookies
- Man braucht einen GC, der Sessions auf dem Server aufräumt

EDIT meint: http://phpsniff.sourceforge.net/ könnte da gute Dienste leisten.
 
Zuletzt bearbeitet:
Zurück