Adapter erstellen
Funktionsweise
Ein Adapter bekommt die Benutzereingaben für Benutzername ($nick) und Passwort ($password).
Wenn der Benutzer erfolgreich authentifiziert wurde, erwartet SH-Memberpages, dass $simquery
den Wert 1 annimmt. Wie dieser Wert zustande kommt, ist für das Script unwichtig.
Beispiel für MySQL-basierte Communities
Dies ist der Adapter für ein Invision Power Board 1.1.x:
<?php
$c_password = md5($password);
$simquery = $db->rows("$gateway WHERE name = '$nick' AND password = '$c_password'");
?>
Hier wird, genau wie von SHMP selbst, MySQL verwendet. Daher spielt das Verbindungsmanagement an dieser Stelle keine Rolle.
Wichtig wird dieses nur, wenn die Datenbank von SHMP eine andere ist als die der Community, oder wenn ein anderes DMBS als MySQL
eingesetzt wird.
Der erste Schritt besteht darin, herauszufinden, wo und wie die Benutzerdaten gespeichert werden. Zuerst will die
Benutzertabelle gefunden werden. Sie heißt normalerweise "user", "member" o.ä.
mysql>show tables from board;
+---------------------+
| Tables_in_board |
+---------------------+
| boardadmin_logs |
| boardadmin_sessions |
[...]
| boardmacro_name |
| boardmember_extra |
| boardmembers |
[...]
+---------------------+
118 rows in set (0.01 sec)
Dann lässt man sich die Struktur der Benutzertabelle anzeigen:
mysql>show fields from board.boardmembers;
+-----------+--------------+--------+--------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+--------+--------+---------+-------+
| id | mediumint(8) | NO | PRI | 0 | |
| name | varchar(255) | NO | MUL | | |
| mgroup | smallint(3) | NO | MUL | 0 | |
| password | varchar(32) | NO | | | |
[...]
An der Länge des Passworts sieht man schon, dass hier der Hashwert gespeichert wird. Jetzt lässt man sich am besten
das Passwort für einen Benutzer anzeigen, den man bei der Installation oder später selbst angelegt hat:
mysql>select password from board.boardmembers where board.boardmembers.name = 'admin';
+----------------------------------+
| password |
+----------------------------------+
| 5261d2ff47a95f62b7e733e2bddf30ed |
+----------------------------------+
1 row in set (0.01 sec)
Wenn man den Algorithmus nicht erkennt, kann man das bekannte Kennwort durch diverse Generatoren (für MD5, SHA-1 usw.)
reproduzieren. Hier handelt es sich um MD5 (das Kennwort ist "nicht_produktiv").
Beim Adapter im Beispiel oben wird dies durch $c_password berücksichtigt. Wenn das Kennwort nicht gehasht wird, ist die Zeile
komplett unnötig.
Schwieriger wird es, wenn kein einfacher Hash verwendet wird, sondern das Kennwort künstlich und transparent verlängert wird.
Wie das passiert, lässt sich nur durch einen Blick in die Quelltexte der Community bzw. durch Nachfrage bei den Entwicklern
herausfinden.