include nur von einer bestimmten Datei aus

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • include nur von einer bestimmten Datei aus

    Hallo Leute,

    ich möchte gerne sicherstellen, dass eine bestimmte Datei (config.php; darin stehen alle passwörter etc.) nur in einer bestimmten Datei (index.php) included werden kann.
    Da ich auf einer meiner Seite meinen Mitgliedern anbiete selbst php-code anzulegen, der dann geparsed und eval()ed wird, soll verhindert werden, dass jemand mal einfach include(config.php) eingibt und sich so alle meine passwörter angucken kann.

    Habe mir schon einige Varianten überlegt, doch ist keine davon definitiv "sicher". Die Datei einfach umzubennen oder die darin enthaltenen variablen, würde wenig nützen, da es genügen funktionen gibt, mit denen man sich alle dateien in einem verzeichnis und alle verwendeten variablen anzeigen lassen kann.

    Wie kann ich absolut sicherstellen, dass config.php auch nur von index.php included werden kann?

    arrays sind klasse

  • #2
    index.php
    PHP-Code:
    // ...
    define('FREAKY_CONSTANT''freaky_value');
    include 
    'config.inc.php';
    // ... 
    config.inc.php
    PHP-Code:
    <?php

    if (!defined('FREAKY_CONSTANT') || FREAKY_CONSTANT != 'freaky_value') exit;

    // jetzt folgen die Passwörter ...

    Kommentar


    • #3
      Soetwas Ähnliches hatte ich auch:

      index.php
      PHP-Code:
      $dbcrypt strtr((string) time(), '0123456789'str_shuffle('qwertzuiopasdfghjklyxcvbnm'));
      include(
      'config.php'); 
      config.php
      PHP-Code:
      ${'host'.$dbcrypt} = 'localhost';
      ${
      'pass'.$dbcrypt} = 'meinpasswort';
      //... 
      Ich hatte allerdings auch vor das ganze Programm bzw. Skript auf der Seite frei zum DL anzubieten. Wenn dann aber diese Sicherheitsmaßnahme bekannt ist, nützt sie leider nur wenig, denn:
      PHP-Code:
      $dbcrypt '';
      include(
      'config.php');
      echo 
      $pass;
      //... 
      Gibt es keine wirklich definitive Möglichkeit, den Zugriff einer Datei, die man includen möchte, nur auf eine andere Datei uz beschränken (oder Ähnliches)?
      arrays sind klasse

      Kommentar


      • #4
        Deine Idee läßt sich aushebeln:
        PHP-Code:
        <?php
        include 'config.php';
        print_r(get_defined_vars());
        Mein Ansatz ist aber auch kein Nonplusultra, denn wenn ich so includen kann, dann geht auch fopen('config.php', 'r'); usw.

        Aber mal was grundsätzliches: Du möchtest Daten schützen, sie aber gleichzeitig zum Download anbieten?
        Zuletzt geändert von onemorenerd; 26.06.2005, 20:13.

        Kommentar


        • #5
          Ich sagte ja, dass meine Lösung nicht wirkt. Es gibt noch mehr Wege diese Hürde zu überwinden. Gleiches gilt für deine Lösung.

          Du möchtest Daten schützen, sie aber gleichzeitig zum Download anbieten?
          Ich möchte meine Daten schützen, die ich in der genannten Datei gespeichert habe. Ich will zwar das Skript anderen überlassen, aber nicht mit meinen Daten drin. Jeder soll es selbst bei sich hochladen und seine eigenen Daten (diese dienen dem Verbinden mit der Datenbank) eingeben.

          Habe auch schon überlegt mit __FILE__ zu arbeiten, da es immer eine dateispezifische Angabe macht. Doch auch hier lässt sich leider einiges machen, um dies zu umgehen.

          Ich brauch halt nur noch die eine zündende Idee.
          arrays sind klasse

          Kommentar


          • #6
            Nee tut mir leid, ich kanns nicht nachvollziehen.
            In einer Config-Datei stehen doch grundsätzlich nur abhängige Werte. Unabhängige kann man fest im Code haben.

            Also wozu willst du deine Config-Datei dem Paket beilegen - wäre nicht eine allgemeine Blanko-Config besser?
            Zuletzt geändert von onemorenerd; 26.06.2005, 21:28.

            Kommentar


            • #7
              Also wozu willst du deine Config-Datei dem Paket beilegen - wäre nicht eine allgemeine Blanko-Config besser?
              ???
              Ich sagte doch:
              Ich will zwar das Skript anderen überlassen, aber nicht mit meinen Daten drin. Jeder soll es selbst bei sich hochladen und seine eigenen Daten eingeben.
              Es _ist_ doch eine blanko-Datei.
              arrays sind klasse

              Kommentar


              • #8
                Und was gibts da zu schützen, wenn doch gar nichts drin steht?!

                Vielleicht postest du mal die Datei so wie man sie später downloaden soll. Hab das Gefühl wir mißverstehen uns.

                Kommentar


                • #9
                  Hab das Gefühl wir mißverstehen uns.
                  möglich

                  Stellen wir uns vor ich schreibe eine neue Forensoftware (was ich nicht tue, ist aber als Beispiel sehr brauchbar). In diesem Programm ist alles wie bei normalen Foren, bis auf ein zusätzliches Feature. Die Mitglieder können in ihren Posts auch php-code schreiben, der bei einem Seitenaufruf sogar ausgeführt wird. Wenn man schreibt <?php echo 'juhu'; ?>, wird auch juhu auf dem Bildschirm erscheinen und nicht etwa der code selbst.
                  Stellen wir uns weiter vor, dass jedes Mitglied sich eine Blanko-Version dieser Forensoftware herunterladen kann, um sie bei sich auf dem eigenen Sevrer zu installieren und laufen zu lassen. Auf diese Weise wissen die Mitglieder, die es sich heruntergeladen haben, auch, wie der Hase läuft bzw. wie und wo die config-Daten liegen.
                  Als findiges Mitglied könnte man natürlich auf die Idee kommen die config-Daten anderer Mitglieder, die sich auch die software heruntergeladen und bei sich installiert haben, zu stehlen, indem man eben bei deren forensoftware einfach <?php echo $config_daten; ?> reinschreibt und diese dann aben auch schön zu sehen bekommt.

                  Genau dies will ich verhindern!
                  Nur wie?
                  arrays sind klasse

                  Kommentar


                  • #10
                    Wenn der PHP-Code in den Beiträgen als solcher ausgeführt werden soll, ist er in dem Moment Teil der Applikation. Der Teil, den du programmierst, soll zugreifen dürfen, der "fremde" Teil nicht.

                    Ich befürchte, das geht so nicht. Du mußt den fremden Code irgendwie in einer "sicheren Umgebung" ausführen. Denn du gefährdest nicht nur die Zugangsdaten.
                    Die User könnten z.B. mit shell_exec() Unsinn treiben. Du gibst ihnen ja die gleiche Macht über den Server, die du (via PHP) hast.

                    Falls du die Idee nun überhaupt noch verfolgen solltest, schau dich mal um, ob und wie man ein "beschnittenes" PHP parallel installieren kann. Das sollte dann keine Dateibefehle, Shellbefehle, mail(), etc. mehr kennen.
                    Das dürfte aber aufwendiger sein, als sich eine Pseudo-Programmiersprache für die User auszudenken, quasi BBCode++.

                    Kommentar


                    • #11
                      Bei den Usern handelt es sich um eine Auswahl bekannter Leute in einem internen "Netzwerk", wo jede Aktion auch geloggt wird. Wäre dem nicht so, würden mir deine Ausführungen echt Sorgen machen. Die User können ruhig auch mit Backticks etc. arbeiten.
                      Mir kommt es wirklich nur darauf an, dass meine config-daten geheim bleiben. Doch wie erreiche ich das am effektivsten?
                      arrays sind klasse

                      Kommentar


                      • #12
                        Bei den Usern handelt es sich um eine Auswahl bekannter Leute in einem internen "Netzwerk", wo jede Aktion auch geloggt wird.
                        Das würde mich nicht abhalten: unlink($logfile);
                        Mir kommt es wirklich nur darauf an, dass meine config-daten geheim bleiben. Doch wie erreiche ich das am effektivsten?
                        Ich sehe nur zwei Möglichkeiten:
                        - Du vertraust den Usern völlig -> ungeschützte Zugangsdaten.
                        - Du kannst ihnen nicht völlig vertrauen -> BBCode aufbohren.

                        Einen Mittelweg gibts imho nicht. (Eigentlich ist ja sowas wie BBCode ein Mittelweg. Naja weißt was ich meine ...)

                        Kommentar


                        • #13
                          Du vertraust den Usern völlig -> ungeschützte Zugangsdaten
                          ich vertraue ja nichteinmal mir selbst
                          Du kannst ihnen nicht völlig vertrauen -> BBCode aufbohren
                          wenn denn alle stricke reißen, muss ich wohl darauf zurückgreifen. doch erstmal sämtliche stricke strippen, um zu sehen, was geht und was nicht.

                          wenn es klappt, dass ich die config-daten nur in der index.php auslesen kann und sonst nirgends, dann würde das auch bedeuten, dass auch ich als betreiber der software nicht überall zugriff darauf nehmen kann. doch dies nehme ich gerne in kauf, wenn dies sicher ist.

                          OffTopic:
                          was ich schon länger mal wissen wollte: was heißt eigentlich "imho" (hast du gerade verwendet) ???
                          oft gelesen und auch verstanden, doch kein wörterbuch spuckt was darüber aus.
                          arrays sind klasse

                          Kommentar


                          • #14
                            wenn es klappt, dass ich die config-daten nur in der index.php auslesen kann und sonst nirgends ...
                            ... dann weil in der index.php ganz bestimmter Code steht. Eben diesen kann der User aber auch in einem Beitrag posten und schon is Essig.
                            ... oder weil die Datei eben index.php heißt. Aber sie ist der Hook der ganzen Applikation, der Usercode läuft ja auch in ihr - eben das verursacht ja erst das Problem.
                            OffTopic:
                            imho = in my humble opinion (dt.: meiner bescheidenen Meinung nach)

                            Kommentar


                            • #15
                              Vergiss es. Alles hindert mich nicht daran, die config.php auch downloaden zu lassen.

                              Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                              sondern mit den Augen das Manual zu lesen.

                              Kommentar

                              Lädt...
                              X