Seite 2 von 2

Verfasst: 03.01.2007 03:09
von hackepeter13
Miriam hat geschrieben:dann suche in der page_header.php, index.php und viewonline.php nach

Code: Alles auswählen

session_time >= " . ( time() - 300 ) 
und passe das an... (300s sind 5 Minuten)
Nur mal so nebenbei.
In meiner index.php gibt es diesen Teil garnicht.

Nicht mal in der originalen neuen .22er Version ist da noch was von vorhanden.

Verfasst: 03.01.2007 12:12
von hiffi
gn#36 hat geschrieben:Dazu könntest du diese Konstante gegen eine Variable tauschen die du mit übergibst die den aktuellen Wert enthält. Um das aber nicht zu einem Sicherheitsrisiko zu machen solltest du das dann gegen eine WHITELIST abgleichen.
So jetzt die Frage woher die variable nehmen?! Und was in gottes namen ist eine WHITELIST ???

@ hackepeter13: Dann lässt es einfach weg ;) Vielleicht war das in einer früheren Version vielleicht so?! Wenn man phpbb unverändert lässt wird die (richtige) onlineliste ja nur im index.php angezeigt, wenn man in foren geht wird ja in page_header.php die SQL abfrage verändert darauf wer grade in diesem forum ist.

Verfasst: 03.01.2007 13:20
von hackepeter13
hiffi hat geschrieben: @ hackepeter13: Dann lässt es einfach weg ;) Vielleicht war das in einer früheren Version vielleicht so?! Wenn man phpbb unverändert lässt wird die (richtige) onlineliste ja nur im index.php angezeigt, wenn man in foren geht wird ja in page_header.php die SQL abfrage verändert darauf wer grade in diesem forum ist.
Klar lass ich es dann weg, bzw. aus mit dem verändern, weils ja nicht da ist, logisch.

Sollte ja auch nur ein Hinweis drauf sein, nicht das dann sowas kommt wie "Hilfe meine index.php is kaputt, hab das bei mir nicht drin" oder so weißt.
Wer das also noch drin hat, hat wohl eine ältere Version.
Und wer ne ältere Version benutzt is selber schuld, sag ich nur :wink:

Verfasst: 03.01.2007 14:26
von gn#36
hiffi hat geschrieben:
gn#36 hat geschrieben:Dazu könntest du diese Konstante gegen eine Variable tauschen die du mit übergibst die den aktuellen Wert enthält. Um das aber nicht zu einem Sicherheitsrisiko zu machen solltest du das dann gegen eine WHITELIST abgleichen.
So jetzt die Frage woher die variable nehmen?! Und was in gottes namen ist eine WHITELIST ???
Eine WHITELIST ist eine Liste der erlaubten Werte. Also z.B. ein Array mit allen erlaubten Einträgen. Da kannst du dann ganz einfach abgleichen ob der Inhalt der Variablen als Wert erlaubt ist. In diesem Fall wäre es vermutlich auch ausreichend zu prüfen ob es sich um einen integer handelt, bei negativen Zahlen außerdem ob dieser Wert erlaubt ist (das sind dann so Seiten wie Index, Private Nachrichten ...) und bei positiven Werten ob das zu dieser Zahl gehörige Forum existiert.
Die Variable nimmst du als Übergabeparameter. Dein Ajax muss ja auch irgendwie wissen auf welcher Seite es sich befindet, da kann es dann auch gleich seinen Aufenthaltsort an die PHP Seite weitergeben.
->Du "erfindest" die Variable quasi neu.
Sofern dann die Daten auf die oben beschriebene Weise geprüft werden sollte das auch kein erhöhtes Sicherheitsrisiko darstellen.

Verfasst: 04.01.2007 15:42
von hiffi
@ hackepeter13: oder zu faul die neue version zu isntallieren^^

@ gn#36: Sorry aber das hat mir nicht wirklich weitergeholfen, ich weiß jetzt zwar was ne WHITELIST bewirken soll aber ich hatte mir ehr erhofft zuerfahren wie ich das programmiere! Es ist nämlich etwas schwer das herauszufinden über php.net oder so wennn man keinen tag hat!

Und zum "variable neu erfinden" genau das will ich nicht! ich möchte die session aktualisieren ohne den ort zu aktualisieren (bzw. den ort aus der DB auslesen und wieder updaten)

wenn ich zusammenfasse willst du drauf hinaus das ajax den intger-wert sendet vom ort oder?! -> wie les ich ihn aus?

Verfasst: 04.01.2007 16:40
von gn#36
Also eine WHITELIST zu programmieren sollte nicht das Problem sein
Einfachste Form:

Code: Alles auswählen

$var = intval($var);
if($var < 0)
{
if(in_array($var,array(-1,-2,-3,...ALLE ERLAUBTEN WERTE IM NEGATIVEN)))
{
//JA IST ERLAUBTER WERT, KANN EINGETRAGEN WERDEN
}
else
{
//UNGÜLTIG; AM BESTEN ABBRUCH
}
}
else
{
$sql = 'SELECT forum_id FROM '.FORUMS_TABLE . ' WHERE forum_id = '.$var;
$result = $db->sql_query($sql) OR message_die(GENERAL_ERROR,'SQL FEHLER');
if($db->num_rows($result))
{
//GÜLTIGES FORUM
}
else
{
//UNGÜLTIGES FORUM AM BESTEN ABBRUCH
}
}
Ein wenig Programmierarbeit ist nun mal erforderlich.
Bezgl. der Variable: Irgendwie muss auch das Ajax doch wissen was es gerade tut? Ich kenne mich mit AJAX nicht aus. Die Werte findest du in der includes/constants.php Datei, wenn sich jemand in einem Forum aufhält wird der Wert positiv.
-> Ja ich will darauf hinaus dass das AJAX mitteilt was es gerade tut. Irgendwie muss es das doch sowieso tun, schließlich landet ja sonst nix in der Datenbank, oder?

Verfasst: 04.01.2007 21:16
von hiffi
Das alles zu schwer und zu komplex ich hab mich jetzt noch mal hingesetzt und überlegt dabei kam das heraus!
Alerdings weiß ich nicht genau wie ich es hinkriege das '0' erlaubt ist aber '' nicht.
Das ganze steht in der session.php in der funktion session_pagestart (ca. Linie 250)

Code: Alles auswählen

	if ( empty($thispage_id) && !empty($session_id) ) {
		$sql = "SELECT session_page FROM " . SESSIONS_TABLE . " WHERE session_id = '$session_id'";
		if ( !($result = $db->sql_query($sql)) )
		{
			message_die(CRITICAL_ERROR, 'Error doing DB query session_page row fetch', '', __LINE__, __FILE__, $sql);
		}
		$spage = $db->sql_fetchrow($result);
		$thispage_id = $spage['session_page'];
	}

	$thispage_id = (int) $thispage_id;
Also insgesamt soll die abfrage so aussehen das wenn $thispage_id = ''; (ACHTUNG nicht $thispage_id = 0; ) die Abfrage ausgeführt wird und halt der letzte wert ermittelt wird!

Ich weiß nicht ob isset funktioniert...wegen:
funktion session_pagestart($var1, $var2)

Verfasst: 04.01.2007 21:47
von hiffi
Problem ganz einfach gelöst!

Hier:
session.php

Code: Alles auswählen

	if ( $thispage_id == '5001' && !empty($session_id) ) {
		$sql = "SELECT session_page FROM " . SESSIONS_TABLE . " WHERE session_id = '$session_id'";
		if ( !($result = $db->sql_query($sql)) )
		{
			message_die(CRITICAL_ERROR, 'Error doing DB query session_page row fetch', '', __LINE__, __FILE__, $sql);
		}
		$spage = $db->sql_fetchrow($result);
		$thispage_id = $spage['session_page'];
		unset($spage);
	}

	$thispage_id = (int) $thispage_id;
constants.php

Code: Alles auswählen

define('PAGE_AJAX', 5001);
check.php (von Ajax aufgerufene Datei)

Code: Alles auswählen

$userdata = session_pagestart($user_ip, PAGE_AJAX);

Verfasst: 04.01.2007 22:29
von gn#36
Ich denke es wäre günstig, wenn du einen Negativen Wert für deine AJAX Seite nimmst, sonst gerät evtl. die "Wer ist Online" Anzeige (im Detail, wer ist wo) ins Schleudern und versucht ein Forum daraus zu machen...

Verfasst: 04.01.2007 23:01
von hiffi
ja da ist was dran... machen we das mal...