Spamschutz bei ajax

aargau

Erfahrenes Mitglied
Hallo zusammen.

Ich habe folgendes Problem:
Eingeloggter user kann bei Bilder Kommentare schreiben. Das ganze wird per ajax an den Server geschickt. Soweit klappt das auch ganz gut. Nur habe ich nun das Problem das wenn jemand die Datei kennt dört einfach direkt per Browser oder gar Script Spamen könnte bzw. die Datenbank mit Inserts quälen. Nun suche ich ein effektiver schutz, dagegen. Eine idee wäre es einfach nur ein kommentar pro X Sekunden zu erlauben, also beim setzen des letzten kommentars einfach die aktuelle Zeit in die Session zu schreiben und jeweils beim Posten zu checken. Dies schützt bestimmt indirekt auch. Notfals könnte man noch eine Sperre machen das man max X Kommentare pro Bild und Minute einfügen könnte.
Nur denke ich das jenach dem wenn jemand nur "ok" oder so schreibt jenach dem schon nach wenigen Sekunden wieder ein Kommentar abgeben will. Daher suche ich nach einer anderen lösung. Ein Capatcha kommt nicht in frage, das wäre für den User zu mühsam.

Ein gleicher schutz suche ich für das Login ansich, da nicht direkt zum Spamen sondern das man sich nicht über ein Programm bzw. eine andere php seite einloggen kann, quasi Bots auszusperren. Gibt es da irgend eine möglichkeit?
 
Aus deinem Text lese ich, dass die Benutzer schon registriert sind. Also erstelle doch einfach eine Tabelle, trag ein wann der Benutzer den letzten Kommentar eingetragen hat und er darf erst X Sekunden später ein neues eintragen.
Für nicht registrierte User gibt es da keine (effektive) Möglichkeit, außer dem von dir bereits abgelehnten Captcha.

Und wenn es ein intelligenter Bot ist bzw. auf deine Seite zugeschnitten, kannst du es nicht verhindern.
 
Habe den Text leider nicht ganz verstanden :eek:
Aber wenn dein Login BOT sicher ist brauchst du den Schutz eigentlich garnicht,
Ob Ajax oder normale HTTP Anfrage du brauchst dann nur im PHP Teil überprüfen ob der Login stimmt,
und nur wenn der Stimmt trägst du die Kommentare ein,
wenn du dein Login für User ohne Cookies optimiert hast musste natürlich die Session ID mit Ajax mit verschicken,
wenn dann ein normaler User noch spammt einfach livetime Bann :)
 
Vielen Dank für eure hilfe,

ja das Login selbst sollte sicher sein. Man müsste schon einige Daten vom anderen Userkennen um die Session zu übernehmen, da wäre es einfacher irgend wie das PW abzufangen.

Das Problem ist dies: User xyz ist 14Jahre alt und hat im Internet gesehen wie man im JS herausfindet wohin die Daten gesendet werden. Er findet da nun "request.php" und sieht auch noch das per POST comment="blabla" und GET id=99 ein Kommentar hinzugefügt wird. Nun ist es ihm mit seinen 14 Jahren langweilig und er schreibt einfach schnell ein Programm welches entweder den Link einfach X mal öffnet oder sogar id=id+1 setzt und so alle Bilder zuspamt.
Daher wird wohl ein schutz sein das man nur X kommentare in einer Zeit abgeben kann. Zusätzlich könnte man allgemein in die Seite ein aufruf schutz einbauen das z.B. bei mehr als 10 Anfragen in der Sekunde der User einfach ausgesperrt wird. Dies würde sowhol solche Bots aussperren wie auch solche welche einfach sinnlos auf F5 drucken und damit unnötige Last Produzieren.

Das Kommentarproblem würde natürlich auch ohne ajax bestehen. Natürlich würde ein user sofort gesperrt werden wenn ein Mod sowas sieht, aber das ganze zu minimieren ist sicherlich auch keine schlechte sache. Früher habe ich einfach getestet ob der selbe kommentar vom gleichen user schon mal innerhalb der letzten X Minuten geschrieben wurde, somit wäre es eigentlich auch nicht mehr möglich Links etc. auf allen Bilder zu Posten. Dies kann aber auch nervend werden wenn jemand keine böse absichten hat. Zudem braucht es natürlich wieder zusätzliche Serverlast da die Kommentare durchsucht werden müssen.

Nun eine idee die mir noch eingefallen ist, einfach ein cookie setzen mit irgend einem code (z.B. zeit * 2 -userid) und den selben (oder ohne -userid) via ajax per get oder post mitzugeben und dann mit dem cookie zu vergleichen.
Denkt ihr das wäre noch was?
 
Ich glaube du denkst bisschen falsch, jeder Mensch kann deinen PHP Script Daten schicken,
auch hier kann jeder einfach als Gast ein Thema an das PHP Script schicken,
nur trägt das Script die Daten nicht ein, weil das Script erst schaut ob der User die Rechte dazu hat.
 
hmm nein, das ist mir schon klar, usernicht eingeloggt = kein eintrag in die db...
Aber nehmen wir nun ahn user 99 schreibt ein kleines Programm beiwelchem er z.B. via Visual Basic einfach den IE "einbindet" und somit auch die session von sich nutzen kann. Nun öffnet er einfach request.php?id=1, request.php=id=2 usw... und sendet jeweils via POST ein kommentar.
Somit sieht danach jeder auf allen Bildern den kommentar vom user 99
und genau das möchte ich verbindern, also so das diese Datei nur noch in Kombination mit der wirkliche Page aufgerufen werden kann + eben kommentar anzahl limitierung.
daher wenn user x auf "ok" beim kommentar form klickt wird in JS die Funktion sendcomment() aufgerufen -> dort wird zuerst ein cookie gesetzt ala zufalsprinzip + userid (um wirklich eindeutig zu sein), nun wird der ajax request ausgeführt allerdings mit request.php?id=bildid&spamschutz=zufalsprinzip+userid
im php wird nun das gesetzte cookie ausgelesen und mit dem GET spamschutz überprüft. Stimmt es nicht -> kommentar wird nicht eingetragen etc.

somit könnte der user nicht mehr nur im JS die seite aussuchen und wahllos spamen sondern müsste auch noch den code generieren was wohl viel zu viel mühe wär, wenn dieses cookie direkt nach jedem mal gelöscht wird.

Hoffe jetzt ist es etwas klarer wie ich das meine.
Die uneingeloggten user machen mir keine sorgen. Hinter diesem ganzen steht auch z.B. eine phishing attake, wo der user ansich nicht wirklich was dafür könnte und dann einfach gesperrt wäre.
 
Moin,


Nun eine idee die mir noch eingefallen ist, einfach ein cookie setzen mit irgend einem code (z.B. zeit * 2 -userid) und den selben (oder ohne -userid) via ajax per get oder post mitzugeben und dann mit dem cookie zu vergleichen.
Denkt ihr das wäre noch was?

die Grundidee ist etwas:)

angenommen:
Du hast ne Session(davon gehe ich mal aus)...die Session-ID kannst du ja per AJAX mitgeben, stelle in der request.php session_use_cookies auf 0 (Cookies kannst du da nicht gebrauchen).

weiter angenommen:
wenn das Formular, welches da per AJAX versendet wird, geladen wird, erstellst du irgendeine Session-Variable mit zufälligem Namen.
Diesen Namen der Session-Variable sendest du per AJAX auch mit.

...dann kannst du:
in der request.php (natürlich nach vorheriger Prüfung eines registrierten Benutzers) nachschauen, ob diese zufällig generierte Session-Variable existiert.
Tut sie es, dann machst du dein INSERT und löschts diese Session-Variable
Tut sie es nicht, machst du nichts.

Es ist sicher kein 1000%iger Schutz, wird dem Langeweiler aber sehr viel mehr abverlangen...er müsste sich vor jeder Spammerei erst einen neuen Namen dieser Session-Variable abholen.

Hier im Forum gibt es etwas Vergleichbares, es nennt sich securitytoken
 
Zurück