Einfacher Schutz vor PN-Spam

In diesem moderierten Forum werden Code-Schnipsel, die zu klein sind, um richtige Mods zu sein, abgelegt.
Bei Fragen oder Problemen benutze bitte das Forum phpBB 2.0: Mod Support.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Christian_W
Ehemaliges Teammitglied
Beiträge: 5703
Registriert: 26.02.2004 00:09

Einfacher Schutz vor PN-Spam

Beitrag von Christian_W »

Die Idee ist ganz einfach: Ein Spammer registriert einen Benutzernamen und versendet dann damit Spam-Nachrichten. Je länger ein Benutzer registriert ist, desto mehr PNs darf er versenden. Ein Spammer mit kurzer Mitgliedschaft also nur wenige, ein Stammgast (sehr) viele.

Wir erfassen also zunächst mal wie lange der Benutzer schon registriert ist:

Code: Alles auswählen

intval( ( $current_time - $userdata['user_regdate'] ) / 86400 )
Die Registrierungszeit wird von der aktuellen Zeit abgezogen. (Geteilt durch 86400 wird um aus den Sekunden die Tage zu berechnen) "intval()" macht eine Ganzzahl daraus.
Die so errechneten Mitgliedstage multplizieren wir mit einem festen Wert. (hier 5)
Nun vergleichen wir diesen Wert mit der Anzahl der bereits vesendeten PNs, ist er höher wird eine Meldung ausgegeben und die PN wird nicht versand. (Meldung: "Du kannst nicht so schnell.. warte einen Moment")
Daraus ergibt sich folgende Anzahl an PNs die versendet werden können:
Am Tag der Registrierung (0 Tage registriert) => 0*5=0 PNs
Am zweiten Tag (1 Tag registriert) => 1*5=5 PNs
Am dritten Tag (2 Tage registriert) => 2*5=10 PNs
...
Am zehnten Tag (9 Tage registriert) => 9*5=45 PNs
Am einhundertsten Tag (99 Tage registriert) => 99*5=495 PNs
Normale Benutzer sollten also mit dieser Sperre keine Probleme bekommen. (Darum verzichten wir auch auf eine spezielle Fehlermeldung)

Hier jetzt die Einbauanleitung:

Code: Alles auswählen

----- öffne -----

privmsg.php

----- finde -----
		$sql = "SELECT MAX(privmsgs_date) AS last_post_time

----- ersetze mit -----
		$sql = "SELECT MAX(privmsgs_date) AS last_post_time, COUNT(privmsgs_from_userid) AS user_total_pm


----- finde -----
			$current_time = time();

----- füge danach ein -----
			$user_total_pm = $db_row['user_total_pm'];
			$user_total_pm_allowed = intval( ( $current_time - $userdata['user_regdate'] ) / 86400 ) * 5; // Tage registriert * 5


----- finde -----
			if ( ( $current_time - $last_post_time ) < $board_config['flood_interval'])

----- ersetze mit -----
			if ( ( $current_time - $last_post_time ) < $board_config['flood_interval'] || $user_total_pm >= $user_total_pm_allowed)
Man könnte auch die Anzahl der Beiträge als Kriterium verwenden "$userdata['user_posts']", schon am ersten Tag PNs erlauben oder eine genauere Fehlermeldung ausgeben (zusätzliche $lang-Variable) oder oder
Für's Erste sollte das aber ausreichen.

Gruß Christian
---
Antworten

Zurück zu „phpBB 2.0: Snippets“