mysql -> .htaccess kein verschlüsseltes SQL-Passwort
roger
- datenbank
Hallo,
habe Heute meine erste mysql Datenbank erstellt und will diese an apache Authorisierung hängen.
Soweit so gut... es läuft.
Für mich komisch: Das "AuthMySQLpassword" muss ich in Klartext angeben, obwohl in der sql-datenbank das passwort als "*2E49EEA611DD78A67C1ED68E61907BB986CA90AD" gespeichert ist.
Hier mal meine ".htaccess"
AuthName "mein name"
AuthType Basic
AuthUserFile /dev/null
AuthBasicAuthoritative off
AuthMySQLAuthoritative On
AuthMySQLHost localhost
AuthMySQLDB visualdb
AuthMySQLUser visualdb_user
AuthMySQLPassword ph
AuthMySQLUserTable mysql_auth
AuthMySQLNameField username
AuthMySQLPasswordField passwd
AuthMySQLPwEncryption scrambled
AuthMySQLEnable On
require valid-user
Ich weiß nicht ob das normal ist, denke nicht ?
Gruß
roger
Tach!
Für mich komisch: Das "AuthMySQLpassword" muss ich in Klartext angeben, obwohl in der sql-datenbank das passwort als "*2E49EEA611DD78A67C1ED68E61907BB986CA90AD" gespeichert ist.
Ich weiß nicht ob das normal ist, denke nicht ?
Das ist normal und richtig so. Das Passwort steht als Hash in der Datenbank, damit man es möglichst schwer hat, es zurückzuübersetzen. Die Clients müssen jedoch immer das wirkliche Passwort senden. Der Server macht dann den Hashwert daraus und vergleicht mit dem gespeicherten Wert. Wenn nun der Client selbst den Hash-Wert senden müsste, würde das ganze Prinzip sinnlos werden. Dann bräuchte man das Passwort in der DB gar nicht zu verschleiern und könnte gleich Klartext mit Klartext vergleichen.
dedlfix.
Hallo und danke für die schnelle Antwort.
d.h. um die Sache etwas sicherer zu machen -> mysql Passwort steht in ./htaccess in Klartext
1. user erstellen der nur lesezugriff in der Datenbank hat und/oder
2. alles aus der ./htaccess raus, wenn möglich ?
Wie soll ich vorgehen bzw. was ist Standard ??
Danke
roger
- user erstellen der nur lesezugriff in der Datenbank hat und/oder
Ja. Das wäre sinnvoll.
Wie soll ich vorgehen bzw. was ist Standard ??
Wer auf die Datenbank zugreift, der muss das Passwort haben. Ganz gleich, wo die Quelle und wie die Quelle beschaffen ist, das Programm (Apache, PHP-Skript, Perl- Skript - oder was auch immer) muss das Passwort ermitteln und an die Datenbank senden können.
Es gilt: Wer die .htacess lesen kann, der ist auch in der Lage das Passwort auf dem selben Weg zu ermitteln wie ihn das Programm vornehmen würde. Das gilt auch dann, wenn das Passwort verschlüsselt gespeichert wird. Eine Ein-Weg-verschlüsselung (hash) würde ja nichts bringen. Du kannst also nur verdunkeln.
Ein Ansatz zur Minimierung Deines Problemes wäre, die Authorisierung nicht in der Datei .htaccess vorzunehmen, sondern als Verzeichniskonfiguration in der Konfigurationsdatei des (virtuellen) Servers (also bspw. in /etc/apache2/sites-available/001_example.org.conf. (siehe Beispiel unten) Wenn auf die jemand (lesend) zugreifen kann, dann hast Du ohnehin ein sehr viel größeres Problem. Nur ist eben diese Konfiguration auch für jedermann, (zwingend insbesondere den Webserver selbst) lesbar...
Ähnliches liese sich aber auch zur .htaccess sagen. Das Hauptproblem sehe ich hier in unsicheren Skripten auf dem Webserver oder darin, dass bei einem Umzug des Dienstes auf einen anderen Server (nur als Beispiel: IIS) die .htaccess vergessen wird.
Beispiel mit Deinen Daten in der Konfiguration des virtuellen Servers:
(Ich weiß jetzt nicht genau, ob Du hier mit dem Location oder Directory-Abschnitt arbeiten musst oder nach Belieben eine der beiden Möglichkeiten nutzen kannst. Im Handbuch ist das Beispiel mit dem Location-Abschnitt, es steht aber als Kontext "directory", was <Directory>, <Location>, <Files>, and <Proxy> bedeuten soll.)
<VirtualHost *:80>
DocumentRoot /vhosts/001_example.org
ServerName example.org
ServerAlias www.example.org
ServerAdmin www-admin@example.org
AddHandler cgi-script .cgi .pl .sh .exe #ich ärgere gern "Hacker"
AddDefaultCharset utf-8
<Directory /srv/www/vhost/001_example.org>
AllowOverride None
Order allow,deny
Allow from all
Options Indexes ExecCGI
</Directory>
<Location /secure>
AuthName foo
AuthType Basic
AuthUserFile /dev/null
AuthBasicAuthoritative off
AuthMySQLAuthoritative On
AuthMySQLHost localhost
AuthMySQLDB visualdb
AuthMySQLUser visualdb_user
AuthMySQLPassword [example]
AuthMySQLUserTable mysql_auth
AuthMySQLNameField username
AuthMySQLPasswordField passwd
AuthMySQLPwEncryption scrambled
AuthMySQLEnable On
require valid-user
#oder: </Directory>
</Location>
</VirtualHost>