Jörg Reinholz, Schlosser: mysql -> .htaccess kein verschlüsseltes SQL-Passwort

Beitrag lesen

  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>