Auslesen des NT-Useraccounts mit Apache 2.X unter Windows

Gerade in Firmen ist es manchmal praktischer, wenn die Benutzer sich an den Webapplikationen nicht extra anmelden müssen. Da dies allerdings für setzen von Berechtigungen in der Webapplikation meißtens unumgänglich ist, kommt die Idee des SSO (Single Sign On) genau richtig.
Man meldet sich also nur noch Morgens mit dem Rechner direkt an der Domäne an und brauch sich dann bei keiner Software mehr zu verifizieren. Das mag zwar nicht unbedingt mit jedem Browser funktionieren, allerdings funktioniert es mit den in Firmennetzwerken meist verwendeten „Internet Explorer“. Wichtig ist in diesem Beispiel, dass der Webserver, der die Daten liefert, sowie die Clients die die Daten abfragen alle an der Domäne angemeldet sind.
Microsofts IIS besitzt von Haus aus das Authentifizierungsverfahren NTLM„, beim Apache muss allerdings erst nachgeholfen werden.

Auf Linux Server Systemen, braucht man das Zusatzmodul NTLM2, auf Windows Servern braucht man das Modul mod_auth_sspi. Die Konfiguration ist denkbar einfach. Im Fall vom SSPI Modul müsst ihr einfach die Moduldatei in das Modulverzeichnis eures Apache Webservers verschieben und in der httpd.conf folgende Zeilen einfügen:

</pre>
LoadModule sspi_auth_module modules/mod_auth_sspi.so

<Directory '---Das Verzeichnis, das ihr per SSO schützen wollt">
 AllowOverride None
 Options None
 Order allow,deny
 Allow from all

 AuthName "SSPI"
 AuthType SSPI
 SSPIAuth On
 SSPIAuthoritative On
 SSPIDomain Eure Domain
 SSPIOmitDomain Off
 SSPIOfferBasic Off

 require valid-user
</Directory>

Das Modul solltet ihr möglichst als letztes laden…

Bevor ihr nun die Server Variablen auslesen könnt, müsst ihr beim jeweiligen Client den Webserver als Vertrauenswürdige Seite im Internet Explorer eintragen, sonst kann es zu Problemen kommen!

Nach einem Apache Restart, könnt ihr nun ausprobieren ob in dem angegebenen Verzeichnis, die entsprechenden Daten ankommen.

Mit dem Befehl:


echo $_SERVER['REMOTE_USER'];

Könnt ihr euch Domäne und NT Account des angemeldeten Benutzers ausgeben lassen.

PHP: Unterschied $_POST, $_GET und der Sicherheitsaspekt

Wenn man effizient mit PHP programmieren möchte, kommt man nicht daran herum Daten oder Parameter an andere, oder sogar das gleiche Script zu übergeben. Nun stellt sich die Frage wie man das am besten bewerkstelligt. PHP gibt uns die Möglichkeit Daten auf mindestens zwei Arten zu übergeben: „POST“ und „GET“.

GET:

Benutzen wir „GET“, werden die zu übergebenen Daten in der Adresszeile hinter dem Verzeichnis und gefolgt von einem „?“ übergeben. Mehrere Übergabewerte werden mit einem „&“ Zeichen getrennt.

Beispiel:

http://www.martinrein.de/verzeichnis/index.php?wert1=inhalt&wert2=zahl

Die übergebenen Daten finden wir dann im globalen Array „$_GET[‚uebergabewert1‘]“ wieder und können diese abrufen und weiterverarbeiten.

POST:

Nutzen wir jedoch „POST“, werden die Daten für den Anwender (ohne weiteres) unsichtbar übertragen. Hierbei können vom Empfänger Script die Daten über das globale Array „$_GET[‚uebergabewert1‘]“ genutzt werden. Bei dieser Variante kann man direkt zwei wichtige Vorteile erkennen:

1. User können die Inhalte der übertragenen Arrayelemente (ohne weiteres) nicht manipulieren, wie es bei der „GET“ Methode möglich ist.
2. Würde man z.B. Usereingaben wie Passwort und Benutzername bei einem Login Script per „GET“ übergeben, sind diese Daten für alle die um den User herumstehen oder vorbeigehen einsehbar.

Fazit

Benutzerbezogene Daten oder Daten die stark in der inneren Funktion des Scripts gebunden sind, sollte man immer per „POST“ übertragen um Sicherheitslücken zu füllen und um wichtige Daten geheim zu halten

Generell, sollte man immer die „POST“ Methode verwenden und nur wenn es nicht anders geht, die „GET“ Methode verwenden.

Florian hat mich darauf Aufmerksam gemacht, dass natürlich nicht alle Daten per „POST“ übertragen werden sollten, z.B. Daten die für Bookmarks wichtig sind oder z.B. Daten die auf den Inhalt von einem Newsbeitrag hinweisen wie Beispielsweise der Titel der News.

PHP Backupscript für MySQL Datenbanksicherung

Jeder Webmaster kennt die Problemlage: Man lässt auf seinem Webserver die Website des eigenen Vereins laufen, administriert diese und kümmert sich um sie. Man freut sich, dass so langsam die Besucherzahlen und die Beitragszahlen im erstellten Forum und Gästebuch steigen. Es läuft gut und die Seite wird immer öfters besucht, aber an Tag X sind alle Daten aus der Datenbank weg…

Um diese Situation innerhalb von 10 Minuten bewältigen zu können, braucht der Admin eine Datenbanksicherung. Um seine Datenbank effektiv zu Sichern, sollte man min. jeden Tag einmal auf dem Backup Button drücken. Da wir ja faul sind, schreiben wir uns einfach ein PHP Script dafür und lassen die Datenbank täglich um eine bestimmte Uhrzeit per Cronjob sichern.

Somit können wir beruhigt sein, dass wir jederzeit ein Backup zu Hand zu haben, welches nicht veraltet ist und unsere Schöne Vereinsseite, kann bei jedem Gedächtnisverlust innerhalb kürzester Zeit reanimiert werden.

Mit folgendem Script, könnt ihr eure Datenbanken automatisiert sichern:

</code></code>

<?php

$db_serv = 'localhost';
$db_user= 'username';
$db_pw  = 'passwort';
$db_name        =   'dbname';

MYSQL_CONNECT($db_serv, $db_user, $db_pw) or die ( "Server nicht erreichbar!");
MYSQL_SELECT_DB($db_name) or die ( "Eine Datenbank mit diesem Namen ist nicht vorhanden!");

$path = "/data/backup_folder"; // Hier schreibt ihr das Verzeichnis rein, wo das Backup gespeichert wird.
$result = MYSQL_QUERY("SHOW TABLES"); //Tabellen ziehen
$numrow = MYSQL_NUM_ROWS($result); //Anzahl der Tabellen ermitteln
//Schleife durchführen bis alle Tabellen durchgegangen sind

for($i = 0;$i < $numrow;$i++) {
//für Jede Tabelle ein gzip Archiv mit dem Namen der Tabelle erstellen
$table = MYSQL_RESULT($result,$i);
echo "$table ... ";
system(sprintf("mysqldump --opt -h $db_serv -u $db_user -p $db_pw $db_name $table | gzip > %s/$table.sql.gz",$path));
echo "ausgefuehrt\n\n";
}

MYSQL_CLOSE();

?>

<code>

Nun braucht ihr nur noch einen Cronjob erstellen, welches dieses Script zu den gewünschten Zeiten ausführt.

Viel Spaß bei der Datenbanksicherung!