Sicherheit in PHP - include

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

  • Sicherheit in PHP - include

    Hallo

    Ist der Code sicher gegen Remote File Inclusion?

    PHP-Code:
    define'PATH_INCLUDE_DATEIEN'dirname(__FILE__) );
    include_once( 
    PATH_INCLUDE_DATEIEN '/meine_template_datei.tpl.php' ); 
    Oder sollte man noch überprüfen, ob die Datei existiert? und eventuell etwas das nicht zur URL gehört ersetzen?

  • #2
    der code ja. ABER was soll das bringen?

    Oder sollte man noch überprüfen, ob die Datei existiert?
    was soll das wiederum bringen? Wenn die datei nicht da ist, hast du nichts zu befürchten, und wenn doch, dann hilft dir das ganze auch nicht, denn eine original-datei würde ja auch existieren.

    Was genau willst du erreichen, ich glaube du hast das eigentliche Problem noch nicht erkannt?

    Kommentar


    • #3
      ok, dann mehr mit ersetzen? wie folgender Code:

      PHP-Code:
      $cracktrack = $_SERVER['QUERY_STRING'];
      $wormprotector = array('chr(', 'chr=', 'chr%20', '%20chr', 'wget%20', '%20wget', 'wget(',
                          'cmd=', '%20cmd', 'cmd%20', 'rush=', '%20rush', 'rush%20',
                         'union%20', '%20union', 'union(', 'union=', 'echr(', '%20echr', 'echr%20', 'echr=',
                         'esystem(', 'esystem%20', 'cp%20', '%20cp', 'cp(', 'mdir%20', '%20mdir', 'mdir(',
                         'mcd%20', 'mrd%20', 'rm%20', '%20mcd', '%20mrd', '%20rm',
                         'mcd(', 'mrd(', 'rm(', 'mcd=', 'mrd=', 'mv%20', 'rmdir%20', 'mv(', 'rmdir(',
                         'chmod(', 'chmod%20', '%20chmod', 'chmod(', 'chmod=', 'chown%20', 'chgrp%20', 'chown(', 'chgrp(',
                         'locate%20', 'grep%20', 'locate(', 'grep(', 'diff%20', 'kill%20', 'kill(', 'killall',
                         'passwd%20', '%20passwd', 'passwd(', 'telnet%20', 'vi(', 'vi%20',
                         'insert%20into', 'select%20', 'nigga(', '%20nigga', 'nigga%20', 'fopen', 'fwrite', '%20like', 'like%20',
                         '$_request', '$_get', '$request', '$get', '.system', 'HTTP_PHP', '&aim', '%20getenv', 'getenv%20',
                         'new_password', '&icq','/etc/password','/etc/shadow', '/etc/groups', '/etc/gshadow',
                         'HTTP_USER_AGENT', 'HTTP_HOST', '/bin/ps', 'wget%20', 'uname\x20-a', '/usr/bin/id',
                         '/bin/echo', '/bin/kill', '/bin/', '/chgrp', '/chown', '/usr/bin', 'g\+\+', 'bin/python',
                         'bin/tclsh', 'bin/nasm', 'perl%20', 'traceroute%20', 'ping%20', '.pl', '/usr/X11R6/bin/xterm', 'lsof%20',
                         '/bin/mail', '.conf', 'motd%20', 'HTTP/1.', '.inc.php', 'config.php', 'cgi-', '.eml',
                         'file\://', 'window.open', '<SCRIPT>', 'javascript\://','img src', 'img%20src','.jsp','ftp.exe',
                         'xp_enumdsn', 'xp_availablemedia', 'xp_filelist', 'xp_cmdshell', 'nc.exe', '.htpasswd',
                         'servlet', '/etc/passwd', 'wwwacl', '~root', '~ftp', '.js', '.jsp', 'admin_', '.history',
                         'bash_history', '.bash_history', '~nobody', 'server-info', 'server-status', 'reboot%20', 'halt%20',
                         'powerdown%20', '/home/ftp', '/home/www', 'secure_site, ok', 'chunked', 'org.apache', '/servlet/con',
                         '<script', '/robot.txt' ,'/perl' ,'mod_gzip_status', 'db_mysql.inc', '.inc', 'select%20from',
                         'select from', 'drop%20', '.system', 'getenv', 'http_', '_php', 'php_', 'phpinfo()', '<?php', '?>', 'sql=');

       $checkworm = str_replace($wormprotector, '*', $cracktrack);
      ist das sicher? Vielleicht gibt es weitere Möglichkeiten?

      Kommentar


      • #4
        was willst du überhaupt???

        Kommentar


        • #5
          Remote File Inclusion unterbinden.

          Der Angreifer soll keinen schädlichen Code in mein Programm einschleusen können und unkontrolliert Programmcode auf dem Webserver ausführen.

          include('datei.php') ist doch sehr unsicher?

          Kommentar


          • #6
            include('datei.php') ist doch sehr unsicher?
            nein. warum sollte das unsicher sein.

            Wenn das unsicher wäre, wären ca. 99% aller applikationen im netz unsicher.

            Bitte lies dich nochmal etwas in die materie ein, um festzustellen, WO die Sicherheitslücke ist. Nur so kannst du verstehen, wie man sich schließt.

            Kommentar


            • #7
              Der Angreifer soll keinen schädlichen Code in mein Programm einschleusen können und unkontrolliert Programmcode auf dem Webserver ausführen.
              dann filtere und maskiere alles, was aus $_GET, $_POST, $_SERVER, $_COOKIE kommt, und wenn du willst auch noch $_SESSION und include keine files, die du per php schreibst.

              include('datei.php') ist doch sehr unsicher?
              warum denn? wenn der webserver keine schreibrechte auf datei.php hat, ist doch alles in butter. den include-path kannst du auch per script einschränken, so beliebig ist der ort von datei.php dann doch nicht.

              grüße
              axo

              Kommentar


              • #8
                dann filtere und maskiere alles, was aus $_GET, $_POST, $_SERVER, $_COOKIE kommt, und wenn du willst auch noch $_SESSION
                $_GET, $_POST...etc wird bereits alles gefiltert und maskiert. Bei der Datenbankabfrage verwende ich überall ein mysql_real_escape_string().

                warum denn? wenn der webserver keine schreibrechte auf datei.php hat, ist doch alles in butter. den include-path kannst du auch per script einschränken, so beliebig ist der ort von datei.php dann doch nicht.
                Stimmt eigentlich.

                Leider ist bei folgenden Quellen ein Beispiel mit include und require dabei.

                http://de.wikipedia.org/wiki/Remote_File_Inclusion
                Die PHP Anweisungen INCLUDE und REQUIRE dienen zum Einbinden extern gespeicherter Programmdateien in die laufende Anwendung. Die Sicherheitslücke entsteht, wenn die Parameterisierung dieser Anweisungen mit ungenügend geprüften Daten, die vom Benutzer eingegeben wurden parameterisiert werden.
                http://ch2.php.net/manual/de/function.include.php

                Using: include dirname(__FILE__).'/../foo/bar' remains the best solution.

                Kommentar


                • #9
                  kannst du denn nicht lesen?
                  aus deinem eigenen zitat:
                  Die Sicherheitslücke entsteht, wenn die Parameterisierung dieser Anweisungen mit ungenügend geprüften Daten, die vom Benutzer eingegeben wurden parameterisiert werden.
                  folgendes ist eine sicherheitslücke:

                  PHP-Code:
                  include('../files/'.$_REQUEST['bla']); 
                  folgendes ist (sofern es keinen anderen grund zur gegenteiligen annahme gibt), keine sicherheitslücke:

                  PHP-Code:
                  include('../files/meine-datei.php'); 
                  wenn du allerdings so bescheuert bist, (wie das in den meisten gästebuch-viren-tutorials gemacht wird), benutzer-eingaben in 'meine-datei.php' zu speichern und dann dieses file zu includen, bist du natürlich selber schuld.

                  include() und require() ist definitiv _nur_ für eigenen code. benutzerdaten werden mit file_get_contents() o.ä. in strings eingelesen, gefiltert und angezeigt, aber _nie_ durch den interpreter gejagt.

                  und ob du
                  PHP-Code:
                  <?php
                  define
                  ('MEIN_INCLUDE_PATH'dirname(__FILE__) . '/lib/');
                  require(
                  MEIN_INCLUDE_PATH  'hello.php');
                  oder
                  PHP-Code:
                  <?php
                  ini_set
                  ('include_path'dirname(__FILE__) . '/lib/');
                  require(
                  'hello.php');
                  machst, ist grad egal.

                  grüße
                  axo
                  Zuletzt geändert von axo; 16.03.2007, 07:04.

                  Kommentar

                  Lädt...
                  X