Tom: Sicherheit: Datenbankzugriff

Hello,

ich ahtte das neulich schon mal diskutiert hier und einige der Ratschläge noch eingebaut, um den "Übeltäter" zu finden.

Szenario:

In einer Konstanten-Definitionsdatei werden

HOSTNAME = localhost
  USER     = user
  PASSWORD = password

definiert.

Diese Datei wird in der Standardbibliothek des Projektes benötigt.
Beide (Konstanten und Standardbibliothek) liegen außerhalb der Doc Root

Im Kernscript "index.php" werden sie included:

<?
include (konstanten)
include (bibliothek)
...
?>

In der Standardbibliothek steht als "Konstruktor" auch die Datenbankverbindung.
Wenn die fehl schlägt, bekomme ich eine Kontroll-Email.

Nun steht da aber als Fehlermeldung immer

Access denied for user: 'USER@maschine.domain.tld' (Using password: YES)

drin. Die Meldung stammt aus mysql_error().

Meine Frage:

Gibt es einen "normalen" Weg, wie dort als User der Name der Konstante und für den Server der Wert des Servernamens hineingelangen können? Wird "localhost" automatisch ersetzt durch den Servernamen bei einem Fehlzugriff? Oder versucht hier doch jemand mittels gefaktem Script, dass ich bisher auch nicht finden konnte, oder mittels Frontend, Zugriff auf die Datenbank zu bekommen?

Wenn PHP einheitlich die Bezeichner in die Fehlermeldung aufnehmen würde, müsst dort ja stehen

Access denied for user: 'USER@HOSTNAME' (Using password: YES)

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
  1. hi,

    Nun steht da aber als Fehlermeldung immer

    Access denied for user: 'USER@maschine.domain.tld' (Using password: YES)

    drin. Die Meldung stammt aus mysql_error().

    und noch einen schritt vorher stammt diese meldung von der DB selbst.

    Gibt es einen "normalen" Weg, wie dort als User der Name der Konstante und für den Server der Wert des Servernamens hineingelangen können?

    es wurde versucht, eine verbindung zur DB herzustellen.
    dabei wurden natürlich auch username/passwort übergeben, und der verbindungsversuch erfolgte zu einem bestimmten rechnernamen.
    diese daten sind mysql jetzt also alle bekannt, und deshalb schreibt es sie auch in die fehlermeldung (bis auf passwort).

    Wird "localhost" automatisch ersetzt durch den Servernamen bei einem Fehlzugriff?

    nein, m.W. nicht.
    die DB gibt die daten in der meldung aus, die zum zugriff verwendet wurden.
    wenn du den DB-server mit "localhost" ansprichst, steht auch user@localhost in der meldung.
    wenn 'USER@maschine.domain.tld' in der meldung steht, dann ist m.E. der verbindungsversuch mit maschine.domain.tld als DB-servername erfolgt.

    Wenn PHP einheitlich die Bezeichner in die Fehlermeldung aufnehmen würde, müsst dort ja stehen
      Access denied for user: 'USER@HOSTNAME' (Using password: YES)

    wie gesagt, das ist nicht PHPs baustelle; die DB selber setzt diese daten dort ein - und gibt dann die komplette meldung an PHP weiter.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. Hello,

      es wurde versucht, eine verbindung zur DB herzustellen.
      dabei wurden natürlich auch username/passwort übergeben, und der verbindungsversuch erfolgte zu einem bestimmten rechnernamen.
      diese daten sind mysql jetzt also alle bekannt, und deshalb schreibt es sie auch in die fehlermeldung (bis auf passwort).

      Das würde aber bedeuten, dass jemand zumindest schon mal in die index.php hineingeschaut haben muss, um die Bezeichner für die Konstanten zu erhalten. Auf welchem Server die DB läuft, kann man dann ja leicht herausfinden.

      Die Meldungen kommen in unregelmäßigen Abständen.

      Wenn es also Fabian nicht war, dann haben wir ein Problem...

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. hi,

        Das würde aber bedeuten, dass jemand zumindest schon mal in die index.php hineingeschaut haben muss, um die Bezeichner für die Konstanten zu erhalten.

        ach so, du meinst weil in der meldung USER steht?
        nein, ich denke nicht, dass mysql den namen deiner PHP-konstanten kennt. denn das würde ja bedeuten, dass mysql den konstanten-namen ünermittelt bekommt, und sich dann daraus den user selbst "suchen" muss - wie soll das gehen?

        wenn mysql in der meldung sagt, "access denied for USER@...", dann wurde der zugriff m.E. mit dem user_namen_ "USER" versucht.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. Hello,

          Das würde aber bedeuten, dass jemand zumindest schon mal in die index.php hineingeschaut haben muss, um die Bezeichner für die Konstanten zu erhalten.

          ach so, du meinst weil in der meldung USER steht?
          nein, ich denke nicht, dass mysql den namen deiner PHP-konstanten kennt. denn das würde ja bedeuten, dass mysql den konstanten-namen ünermittelt bekommt, und sich dann daraus den user selbst "suchen" muss - wie soll das gehen?

          wenn mysql in der meldung sagt, "access denied for USER@...", dann wurde der zugriff m.E. mit dem user_namen_ "USER" versucht.

          Genau das ist das Problem. Und das nächste Problem ist, dass der Zugriff scheinbar auch mittels der Librairy durchgeführt wurde. Für wen die zugänglich ist, ist leider auch die Konstantendatei zugänglich. Ich habe da also einen Wurm im System. Fabian wüsste ja, wie das System funktioniert und müsste sich nicht so dämlich anstellen.

          Eine zeitlang wurde da wohl auch versucht, direkt über Port 3306 von außen zuzugreifen. das führt aber zu einer sofortigen Abschaltung des Deamon.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau