roger: mysql -> .htaccess kein verschlüsseltes SQL-Passwort

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

  1. 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.

    1. 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

        1. 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>

        oder: <Directory /vhosts/001_example.org/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>