HTTP-Authentifizierung mit phpBB

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
CarstenF
Mitglied
Beiträge: 37
Registriert: 07.01.2008 20:17
Kontaktdaten:

HTTP-Authentifizierung mit phpBB

Beitragvon CarstenF » 10.01.2010 21:51

Hallo liebe Leute,

habe bereits phpbb.de und phpbb.com per Suche abgegrast, und u.a.
gefunden, ist aber leider alles nicht das Richtige.

Was ich gerne machen würde, ist HTTP-Authentifizierung mit PHP, siehe http://php.net/manual/de/features.http-auth.php, wobei der Username und das Passwort gegen die phpBB Benutzerdatenbank geprüft werden sollen.

Mir ist zwar prinzipiell klar, wie man das "per Hand" machen kann, aber ich würde vermutlich nur eine sehr umständliche und fragile Lösung hinkriegen (in etwa: "mit PHP direkt auf die DB zugreifen").
Kann mir evtl. jemand für eine elegantere Lösung Tipps geben bzw. auf die Sprünge helfen? z.B. kann ich irgendwie die phpBB Klassen für die DB-Abfrage benutzen? Wäre deutlich eleganter. 8)

Ganz herzlichen Dank im voraus! :grin:
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action

Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12735
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: HTTP-Authentifizierung mit phpBB

Beitragvon Pyramide » 10.01.2010 21:55

Soll das grundsätzlich für das gesamte Forum gelten? Dann kannst du einfach im ACP das mitgelieferte Auth-Plugin aktivieren.

CarstenF
Mitglied
Beiträge: 37
Registriert: 07.01.2008 20:17
Kontaktdaten:

Re: HTTP-Authentifizierung mit phpBB

Beitragvon CarstenF » 10.01.2010 22:05

Pyramide hat geschrieben:Soll das grundsätzlich für das gesamte Forum gelten? Dann kannst du einfach im ACP das mitgelieferte Auth-Plugin aktivieren.

Ähm, eigentlich möchte ich erreichen, dass man sich ganz wo anders (Bug/Issue Tracker Trac, dieser hier) authentifizieren kann, indem man seinen Username + Passwort aus dem Forum eingibt. Trac unterstützt HTTP Authentication, d.h. würde dafür das von mir zu schreibende Script aufrufen. Insofern verstehe ich glaube ich Deine Rückfrage nicht so ganz... [EDIT: Habe gerade nachgeschaut, das Auth-Plugin ist doch eher für den umgekehrten Fall gedacht, d.h. man logged sich in phpBB3 ein mit Daten aus einer "anderen" DB, oder??]

(Kann leider nicht aus Trac selbst auf die Datenbank direkt zugreifen - unterschiedliche Hoster.)
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action

Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12735
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: HTTP-Authentifizierung mit phpBB

Beitragvon Pyramide » 10.01.2010 23:46

D.h. du brauchst einfach nur ein Script, welches das per HTTP Authentication übertragene Passwort auf Gültigkeit prüft und einfach eine leere Seite mit 200/401 Status liefert? Dann brauchst du doch bloß ein Grundgerüst wie im PHP-Handbuch beschrieben erstellen und das Passwort mit phpbb_check_hash() prüfen.

CarstenF
Mitglied
Beiträge: 37
Registriert: 07.01.2008 20:17
Kontaktdaten:

Re: HTTP-Authentifizierung mit phpBB

Beitragvon CarstenF » 11.01.2010 00:48

Pyramide hat geschrieben:D.h. du brauchst einfach nur ein Script, welches das per HTTP Authentication übertragene Passwort auf Gültigkeit prüft und einfach eine leere Seite mit 200/401 Status liefert?

Im Prinzip ja, wobei die Seite voraussichtlich bei 200 Antwort noch die (irgendwie unkenntlich gemachte) Email-Adresse des Users enthält, das aufrufende Script kann die gut gebrauchen. Aber das nur am Rande. ;-)

Dann brauchst du doch bloß ein Grundgerüst wie im PHP-Handbuch beschrieben erstellen und das Passwort mit phpbb_check_hash() prüfen.

Ah!! Vielen Dank! Ja, das geht definitiv in die richtige Richtung! :grin:

Aber am wichtigsten wäre ja erstmal, wie ich (ausgehend vom Grundgerüst, welches mir den Username und Passwort liefert) überhaupt bzw. korrekt in der phpBB DB nachschlage, ob ein solcher User überhaupt existiert und wenn ja, wie sein Passwort-Hash lautet??

Und noch eine Nebenfrage: ist phpbb_check_hash($password, $hash) evtl. in etwa so implementiert: return phpbb_hash($password)==$hash; ? Falls ja, worin liegt der Sinn? (Letzteres kann der User-Code doch direkt so aufrufen?)
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action

Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12735
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: HTTP-Authentifizierung mit phpBB

Beitragvon Pyramide » 11.01.2010 10:27

CarstenF hat geschrieben:Aber am wichtigsten wäre ja erstmal, wie ich (ausgehend vom Grundgerüst, welches mir den Username und Passwort liefert) überhaupt bzw. korrekt in der phpBB DB nachschlage, ob ein solcher User überhaupt existiert und wenn ja, wie sein Passwort-Hash lautet??
Dazu reicht doch simpelstes SQL:

Code: Alles auswählen

SELECT user_password FROM phpbb_users WHERE username='xyz'


CarstenF hat geschrieben:Und noch eine Nebenfrage: ist phpbb_check_hash($password, $hash) evtl. in etwa so implementiert: return phpbb_hash($password)==$hash; ? Falls ja, worin liegt der Sinn? (Letzteres kann der User-Code doch direkt so aufrufen?)
Guck dir am besten selbst den Quellcode an: http://www.phpbb.de/infos/3.0/xref/nav. ... .html#l413

CarstenF
Mitglied
Beiträge: 37
Registriert: 07.01.2008 20:17
Kontaktdaten:

Re: HTTP-Authentifizierung mit phpBB

Beitragvon CarstenF » 11.01.2010 11:21

Pyramide hat geschrieben:Dazu reicht doch simpelstes SQL:

Code: Alles auswählen

SELECT user_password FROM phpbb_users WHERE username='xyz'

Ok, klar, danke! Und das letzte Teil vom Ganzen, das mir noch gefehlt hat, habe ich glaube ich gerade über eine Google Suche nach "phpbb database class" gefunden: Using the phpBB3.0 DBAL.

Damit ist dann wohl alles beisammen - nochmals ganz herzlichen Dank!! :D :grin:
(Wenn mein Script fertig ist, werde ich's hier posten.)
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action

CarstenF
Mitglied
Beiträge: 37
Registriert: 07.01.2008 20:17
Kontaktdaten:

Re: HTTP-Authentifizierung mit phpBB

Beitragvon CarstenF » 13.01.2010 21:20

Um die Sache gerade noch zum Abschluss zu bringen, hier mein Ergebnis:

Code: Alles auswählen


<?php
/**
 *
 * Quellen:
 * [1] http://www.phpbb.de/community/viewtopic.php?f=93&t=201405
 * [2] http://wiki.phpbb.com/Using_the_phpBB3.0_DBAL
 * [3] http://php.net/manual/de/features.http-auth.php
 *
 * HTTP-Authentifizierung geht bei 1und1 leider nicht (PHP läuft als CGI, nicht als Apache Modul):
 * [4] http://hilfe-center.1und1.de/hosting/scripte_datenbanken/php/5.html
 *
 */

define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

include(
$phpbb_root_path . 'common.' . $phpEx);


# Verwende request_var() statt $_GET, siehe [1] und <http://wiki.phpbb.com/Request_var>.
$username=request_var('u', '');
$password=request_var('p', '');

# Besser mit "clean", siehe [1] und <http://wiki.phpbb.com/Utf8_clean_string>.
$sql   ="SELECT user_password, user_email FROM " . USERS_TABLE .
        " WHERE username_clean='" . $db->sql_escape(utf8_clean_string($username)) . "'";
$result=$db->sql_query($sql);
$row   =$db->sql_fetchrow($result);

if (phpbb_check_hash($password, $row['user_password']))
{
    // Sende die Antwort in der vom Empfänger erwarteten Form.
    echo "ok\n";
    echo $row['user_email'];
}
else
{
    header('HTTP/1.0 401 Unauthorized');
    echo "Sorry, the username or the password was invalid.\n";
    echo "Please try again!";
}

?>

[ EDIT: Bantus Vorschläge eingearbeitet. ]

Im Nachhinein völlig simpel. :D :lol: :wink:
Nochmals vielen Dank, Pyramide!
Zuletzt geändert von CarstenF am 15.01.2010 00:49, insgesamt 1-mal geändert.
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action

CarstenF
Mitglied
Beiträge: 37
Registriert: 07.01.2008 20:17
Kontaktdaten:

Re: HTTP-Authentifizierung mit phpBB

Beitragvon CarstenF » 13.01.2010 23:45

Achso, und vielleicht noch das Wichtigste - der Sinn des Ganzen:

Mit diesem kleinen Script und diesem Plugin (auch von mir :D) für Trac kann man sich nun in Trac einloggen mit den Login-Daten des (eigenen) phpBB Forums, und zwar auch dann, wenn

  • die Datenbank des Forums auf einem komplett anderen Host liegt als Trac (und von letzterem bzw. öffentlich nicht erreichbar ist), und
  • PHP als CGI ausgeführt wird und daher HTTP-Auth (siehe Link oben) nicht möglich ist.
(Beides trifft übrigens bei 1und1 zu.)
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action

Benutzeravatar
bantu
Server-Team
Beiträge: 7304
Registriert: 25.04.2006 16:12
Wohnort: Karlsruhe

Re: HTTP-Authentifizierung mit phpBB

Beitragvon bantu » 14.01.2010 02:52

Für Benutzernamen und Passwort solltest du besser request_var() anstatt $_GET verwenden, wenn du phpBB sowieso geladen hast.

Und anstatt "username =" besser

Code: Alles auswählen

$sql ="SELECT user_password, user_email
FROM " 
USERS_TABLE "
WHERE username_clean = '" 
$db->sql_escape(utf8_clean_string($username)) . "'"

Auf username_clean gibt's einen INDEX.
Powered by Coffee


Zurück zu „[3.0.x] Mod Bastelstube“