Seite 1 von 1

SQL in phpBB & Sicherheit

Verfasst: 07.01.2007 18:45
von Sanchez17
Hola,

ich arbeite seit 1-2 Wochen an eigenen php Srcipte (für eigen gebrauch).
Ich benutze für die PHP Dateien folgende Vorlage:
http://www.phpbb.de/doku/kb/artikel.php ... gene+seite

Bis jetzt habe ich bei meinen Scripten die Verbindung zur Datenbank im Script aufbauen müssen und schleßen müssen usw...wie hier beschrieben:
http://php-einfach.de/einf_mysql.php

Nun habe ich mir mal angesehen, wir die Standart phpBB Dateien dies machen. Und ich habe dort weder noch ein Verbindungsaufbau, noch irgendwas anderes "nötiges" entdeckt. Sonder nur die Anweisung "$SQL =".
Selbst die while Schleife usw. sehe ich nicht.

Kann man im phpBB die SQL Anweisung einfach so beginnen?
Oder gibt es da noch was zu beachten?

Zudem noch was anderes, nämlich der Sicherheit. Gibt es irgendwo Infos/Beispiele o.ä. was sich mit Sicherheit in eigenen Scripten in phpBB beschäftigt?

Weder die Suche, noch Google konnten mir brauchbare informationen bzw. Antworten geben.

hasta luego,
Miguel

Verfasst: 07.01.2007 19:49
von PhilippK
Wo siehst du da kein while?

Code: Alles auswählen

//
// Obtain list of moderators of each forum
// First users, then groups ... broken into two queries
//
$sql = "SELECT u.user_id, u.username 
	FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE . " u
	WHERE aa.forum_id = $forum_id 
		AND aa.auth_mod = " . TRUE . " 
		AND g.group_single_user = 1
		AND ug.group_id = aa.group_id 
		AND g.group_id = aa.group_id 
		AND u.user_id = ug.user_id 
	GROUP BY u.user_id, u.username  
	ORDER BY u.user_id";
if ( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql);
}

$moderators = array();
while( $row = $db->sql_fetchrow($result) )
{
	$moderators[] = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '">' . $row['username'] . '</a>';
}
Du musst natürlich bedenken, dass phpBB den Aufbau der DB-Verbindung zentral über einen Include vornimmt und dann noch über eine DB-unabhängige Klassensammlung ($db->...) verfügt, über die die Datenbank-Befehle aufgerufen werden. Die normale PHP-Lehrbuch-Methode sieht da etwas anders aus.

Gruß, Philipp

Verfasst: 07.01.2007 20:01
von Sanchez17
Hi,

ah, jetzt sehe ich while :)
Die muss ich wohl übersehen haben...


Ich denke, ich habe nun verstanden, wie es läuft.
Werde dann später mal mein Glück versuchen, meine Scripte umzuschreiben.


Danke für die Info ;)

hasta luego,
Miguel

Verfasst: 13.01.2007 15:12
von Sanchez17
Hola,

im moment klappt alles wunderbar, nach der änderung...nur an einer Stelle, meckert das Script, an dieser:

Code: Alles auswählen

$db->sql_query("SELECT id FROM " . development . " WHERE section = '$section'");

$menge = mysql_num_rows($db);
Dieser Code befindet sich in einer While Schleife, nach einer Abfrage.

Früher hat dies funktioniert, jetzt nach der änderung (also an der phpBB anpassung) bekomm ich eine Fehlermeldung.

Die erste Meldung war, dass "mysql_query" keine Funktion hatte, oder sowas ähnliches. Danach änderte ich "mysql_query" sowie "mysql_num_rows" in "sql_query" und "sql_num_rows"....

Doch die gleiche Meldung folgte...als ich es dann wieder auf "mysql" Umstellte, bekam ich eine andere Fehlermeldung:

Code: Alles auswählen

 	
Fatal error: Maximum execution time of 60 seconds exceeded
Weiß jemand, was ich an dieser Abfrage ändern muss, damit es funktioniert?


Edit:
Ein Teil des Codes konnte ich erfolgreich umstellen...
Doch der Code nach der Variabeln $menge (siehe oben) will er nocch nicht annehmen...

Meldung:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource

Verfasst: 13.01.2007 16:30
von S2B
So muss es aussehen:

Code: Alles auswählen

$result = $db->sql_query("SELECT id FROM " . development . " WHERE section = '$section'");

$menge = $db->sql_numrows($result);
Zur Datenbank-Klasse vom phpBB: Welche Funktionen das Objekt $db unterstützt, kannst du in der db/xxx.php (z.B. mysql4.php) nachschauen. :wink:

Verfasst: 15.01.2007 10:25
von Sanchez17
Hola,

danke. Scheint geklappt zu haben.

hasta luego,
Miguel