Ban aanpassing

Hulp nodig bij een modificaties of op zoek naar een MOD? Bekijk ons archief. Support wordt helaas niet meer verleend.
Forumregels

Sinds 1 januari 2009 wordt phpBB2 niet meer ondersteund.
Onderstaande informatie is verouderd en dient uitsluitend als archief.
phpBB2.0.x
Gesloten
Lontronics

Ban aanpassing

Bericht door Lontronics » 14 dec 2005, 18:41

Op een van mijn forums zijn een aantal delen afgeschermd voor gasten.
Wanneer gasten deze forumdelen bekijken, zien ze wel de topics staan maar wanneer de topics worden aangeklikt verschijnt een bericht dat ze in moeten loggen met een link (eigen mod).

Nu bleek echter dat er mensen zo creatief zijn dat ze via de login naam van een ander inloggen, oftewel misbruik.
Ik wilde geen gebruik maken van de normale ban die iedereen van het forum weert, echter een controle die kijkt of een user_ip of user_id uit de banlist wordt gebruikt in combinatie met een login. Zoja, dan wordt de gebruiker weer uitgelogd en kan dus als gast de toegestane delen van het forum bezoeken.

Ik heb hiervoor het volgende gedaan:

Code: Selecteer alles

## AUTOMATISCH UITLOGGEN VAN MENSEN DIE MET HUN USERNAAM OF USERIP IN DE BANLIST STAAN
## ALS VERVANGER VOOR DE ORIGINELE BAN;

- /forum/includes/sessions.php:
Verwijder de originele code t.b.v. ban (ca. regel 124 t/m 149):

	//
	// Initial ban check against user id, IP and email address
	//
	preg_match('/(..)(..)(..)(..)/', $user_ip, $user_ip_parts);

	$sql = "SELECT ban_ip, ban_userid, ban_email 
		FROM " . BANLIST_TABLE . " 
		WHERE ban_ip IN ('" . $user_ip_parts[1] . $user_ip_parts[2] . $user_ip_parts[3] . $user_ip_parts[4] . "', '" . $user_ip_parts[1] . $user_ip_parts[2] . $user_ip_parts[3] . "ff', '" . $user_ip_parts[1] . $user_ip_parts[2] . "ffff', '" . $user_ip_parts[1] . "ffffff')
			OR ban_userid = $user_id";
	if ( $user_id != ANONYMOUS )
	{
		$sql .= " OR ban_email LIKE '" . str_replace("\'", "''", $userdata['user_email']) . "' 
			OR ban_email LIKE '" . substr(str_replace("\'", "''", $userdata['user_email']), strpos(str_replace("\'", "''", $userdata['user_email']), "@")) . "'";
	}
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(CRITICAL_ERROR, 'Could not obtain ban information', '', __LINE__, __FILE__, $sql);
	}

	if ( $ban_info = $db->sql_fetchrow($result) )
	{
		if ( $ban_info['ban_ip'] || $ban_info['ban_userid'] || $ban_info['ban_email'] )
		{
			message_die(CRITICAL_MESSAGE, 'You_been_banned');
		}
	}

- /forum/includes/page_header.php:
Zoek (ca.regel 70):

//
// Parse and show the overall header.
//
$template->set_filenames(array(
	'overall_header' => ( empty($gen_simple_header) ) ? 'overall_header.tpl' : 'simple_header.tpl')
);

Voeg hieronder toe:

//
// Start auth check; when user_id or user_ip is found in the ban list , the user is logged out
// This is used to prevent banned users to login under another name from a friend for example
//
if ( $userdata['session_logged_in'] )
{
	$user_id = $userdata['user_id'];
	$sql = "SELECT ban_ip, ban_userid, ban_email 
		FROM " . BANLIST_TABLE . " 
		WHERE ban_ip = '$user_ip'
		OR ban_userid = '$user_id'";

	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(CRITICAL_ERROR, 'Could not obtain ban information', '', __LINE__, __FILE__, $sql);
	}

	if ( $ban_info = $db->sql_fetchrow($result) )
	{
		if ( $ban_info['ban_ip'] || $ban_info['ban_userid'] || $ban_info['ban_email'] )
		{
			session_end($userdata['session_id'], $userdata['user_id']);
			unset($userdata['session_logged_in']);
		}
	}
}
[/size]

Mijn vraag is echter de volgende:

Waarom wordt het banbeheer standaard in sessions.php gebruikt en niet in de header?
Ik heb e.e.a. nl. ook via sessions.php geprobeerd, maar dit gaf niet het gewenste resultaat. En toen zo nadenkende vroeg ik mij af waarom e.e.a. niet gewoon in de header wordt afgehandeld.
Het voordeel hiervan is dat bij elke pageview wordt gecontroleerd.
Het nadeel natuurlijk iets meer sql belasting.

Overigens ban ik dus niet meer op emailadres, voordat iemand me hier zeer oplettend op wijst ;)

Jan

Gebruikersavatar
mosymuis
Berichten: 6940
Lid geworden op: 05 feb 2003, 14:00
Locatie: Amsterdam
Contacteer:

Re: Ban aanpassing

Bericht door mosymuis » 14 dec 2005, 19:08

Lontronics schreef:Het nadeel natuurlijk iets meer sql belasting.
Daar geef je je verklaring. Overigens werkt alles op sessie, zou je je phpbb_session tabel leegmaken dan start de functie mét bancheck voor iedereen opnieuw.

Gebruikersavatar
Paul
Beheerder
Beheerder
Berichten: 20316
Lid geworden op: 23 okt 2003, 11:38
Locatie: Utrecht
Contacteer:

Bericht door Paul » 14 dec 2005, 19:14

En zowiezo wordt wanneer er een ban wordt aangemaakt, de sid verwijderd, en anders wordt er na 5 minuten nogmaals gecontroleerd, omdat de sessie dan wordt geupdated.

Gebruikersavatar
mosymuis
Berichten: 6940
Lid geworden op: 05 feb 2003, 14:00
Locatie: Amsterdam
Contacteer:

Bericht door mosymuis » 14 dec 2005, 19:15

paulus schreef:en anders wordt er na 5 minuten nogmaals gecontroleerd, omdat de sessie dan wordt geupdated.
Dat gebeurt in een andere functie. Verder heb je gelijk.

Lontronics

Bericht door Lontronics » 14 dec 2005, 19:17

Hallo Mosy,

Toch een vraagje over jouw opmerking aangaande de phpbb_session tabel.

Je hebt gelijk dat dan idd de gehele functie opnieuw gestart wordt.
Maar als ik het zo inschat zou dit minder efficient zijn dan wat ik nu doe; simpelweg omdat gasten dan ook uit de sessietabel worden gegooid.
Bovendien wordt het bezoekersaantal dan niet meer juist weergegeven.

Heb jij hier dezelfde ideeen over, of had je iets anders in gedachten?

Jan

Lontronics

Bericht door Lontronics » 14 dec 2005, 19:19

@Paulus: w.b. die 5 minuten; dat is de standaard uitvoering ;)

Op het forum waar ik het nu over heb staat dit op een half uur.

Jan.

Gebruikersavatar
Paul
Beheerder
Beheerder
Berichten: 20316
Lid geworden op: 23 okt 2003, 11:38
Locatie: Utrecht
Contacteer:

Bericht door Paul » 14 dec 2005, 19:22

Het klopt niet eens wat ik zei, na bestudering van sessions.php, enkel de SID wordt verwijder in admin_user_ban.php, daarna wordt nieuwe aangemaakt, met check, maar als de SID nog besstaat, wordt er geen check gedaan op bans, enkel hem geupdated.

En, ik kan me bijna niet voorstelen, dat een sessie maar een keer per half uur wordt geupdated.

Lontronics

Bericht door Lontronics » 14 dec 2005, 19:27

Ik ging er vanuit dat we het hadden over de sessielengte uit de config.
Verder had ik nog niet gekeken ;)

Maar het viel me iig op dat bij het bannen via sessions.php een ban niet direct actief was na het toevoegen. Ik kon het gehele forum over zonder dat er ik gebanned werd.
Pas na uitloggen/ inloggen werd de ban actief.

Jan

Gebruikersavatar
Paul
Beheerder
Beheerder
Berichten: 20316
Lid geworden op: 23 okt 2003, 11:38
Locatie: Utrecht
Contacteer:

Bericht door Paul » 14 dec 2005, 19:30

Bande je op username/ip? Want daarbij worden alle sessies verwijderd die aan dat IP/username mee ingelogt zijn in admin_user_ban.php

Lontronics

Bericht door Lontronics » 14 dec 2005, 19:32

user_ip ;)

Maar Paulus, op zich ben ik tevreden met mijn oplossing dus maak je niet te druk :bier:

Ik heb echter niets gemerkt van het verwijderen van sessies.
Dit wordt gedaan wanneer de ban_ip wordt opgeslagen?

Jan

Gebruikersavatar
Paul
Beheerder
Beheerder
Berichten: 20316
Lid geworden op: 23 okt 2003, 11:38
Locatie: Utrecht
Contacteer:

Bericht door Paul » 14 dec 2005, 19:41

Code: Selecteer alles

		if ( !$in_banlist )
		{
			if ( preg_match('/(ff\.)|(\.ff)/is', chunk_split($ip_list[$i], 2, '.')) )
			{
				$kill_ip_sql = "session_ip LIKE '" . str_replace('.', '', preg_replace('/(ff\.)|(\.ff)/is', '%', chunk_split($ip_list[$i], 2, "."))) . "'";
			}
			else
			{
				$kill_ip_sql = "session_ip = '" . $ip_list[$i] . "'";
			}

			$kill_session_sql .= ( ( $kill_session_sql != '' ) ? ' OR ' : '' ) . $kill_ip_sql;

			$sql = "INSERT INTO " . BANLIST_TABLE . " (ban_ip)
				VALUES ('" . $ip_list[$i] . "')";
			if ( !$db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, "Couldn't insert ban_ip info into database", "", __LINE__, __FILE__, $sql);
			}
		}
Het wordt dus verwijderd bij het maken van een ban.

Lontronics

Bericht door Lontronics » 14 dec 2005, 19:46

Kan het dan zijn dat de reden is dat ik het met mijn eigen IP adres heb getest ? :?

Gebruikersavatar
Paul
Beheerder
Beheerder
Berichten: 20316
Lid geworden op: 23 okt 2003, 11:38
Locatie: Utrecht
Contacteer:

Bericht door Paul » 14 dec 2005, 19:52

Hmm, nee lijkt me niet.

Gesloten