Subversion Repositories personal-webbase

Rev

Rev 4 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4 Rev 8
Line 35... Line 35...
35
 
35
 
36
  if ((@ftp_size($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/moddir.txt') == -1) || (substr($konfiguration['core_directftp']['ftp-verzeichnis'], 0, 1) != '/') || (substr($konfiguration['core_directftp']['ftp-verzeichnis'], strlen($konfiguration['core_directftp']['ftp-verzeichnis'])-1, 1) != '/'))
36
  if ((@ftp_size($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/moddir.txt') == -1) || (substr($konfiguration['core_directftp']['ftp-verzeichnis'], 0, 1) != '/') || (substr($konfiguration['core_directftp']['ftp-verzeichnis'], strlen($konfiguration['core_directftp']['ftp-verzeichnis'])-1, 1) != '/'))
37
    $fehler = 1;
37
    $fehler = 1;
38
 
38
 
39
  if ($fehler)
39
  if ($fehler)
40
    die($header.'<b>Fehler</b><br><br>Fehlkonfiguration im FTP-Direktzugriff-Kernmodul! FTP-Zugangsdaten oder -Verzeichnis fehlerhaft bzw. zu geringe Zugriffsrechte! Bitte <a href="'.$_SERVER['PHP_SELF'].'?modul=core_directftp&amp;seite=konfig&amp;vonmodul='.$modul.'">Konfigurationswerte</a> einsehen.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
40
    die($header.'<b>Fehler</b><br><br>Fehlkonfiguration im FTP-Direktzugriff-Kernmodul! FTP-Zugangsdaten oder -Verzeichnis fehlerhaft bzw. zu geringe Zugriffsrechte! Bitte <a href="'.$_SERVER['PHP_SELF'].'?modul=core_directftp&amp;seite=konfig&amp;vonmodul='.urlencode($modul).'">Konfigurationswerte</a> einsehen.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.urlencode($modul).'">Zur&uuml;ck</a>'.$footer);
41
 
41
 
42
  // Los gehts!
42
  // Los gehts!
43
 
43
 
44
  if ($aktion == 'delete')
44
  if ($aktion == 'delete')
45
  {
45
  {
46
    // Achtung! Ein Hacker könnte ../ als Modul angeben und somit das komplette Modulverzeichnis oder mehr rekursiv löschen!
-
 
47
    if (strpos($modul, '..'))
-
 
48
      die($header.'<b>Fehler</b><br><br>Der L&ouml;schvorgang wurde aufgrund einer Schutzverletzung abgebrochen!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
-
 
49
 
-
 
50
    // Nun Modul über FTP löschen!
46
    // Nun Modul über FTP löschen!
51
    @ftp_rmdir_rec($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$entfernen);
47
    @ftp_rmdir_rec($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($entfernen));
52
    if ($conn_id) @ftp_quit($conn_id);
48
    if ($conn_id) @ftp_quit($conn_id);
53
 
49
 
54
    // Info: MySQL-Daten löschen sich über Autostart automatisch
50
    // Info: MySQL-Daten löschen sich über Autostart automatisch
55
    if (!headers_sent()) header('location: '.$_SERVER['PHP_SELF'].'?seite=inhalt&modul='.$modul);
51
    if (!headers_sent()) header('location: '.$_SERVER['PHP_SELF'].'?seite=inhalt&modul='.urlencode($modul));
56
  }
52
  }
57
 
53
 
58
  if ($aktion == 'install')
54
  if ($aktion == 'install')
59
  {
55
  {
60
          // Temp-Verzeichnisnamen finden
56
          // Temp-Verzeichnisnamen finden
61
      $uid = 'temp_'.zufall(10);
57
      $uid = 'temp_'.zufall(10);
62
 
58
 
63
      // Datei in unser Verzeichnis kopieren, sodass wir darauf zugreifen können (für Safe-Mode)
59
      // Datei in unser Verzeichnis kopieren, sodass wir darauf zugreifen können (für Safe-Mode)
64
      if (!@ftp_put($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'.zip', $_FILES['dfile']['tmp_name'], FTP_BINARY))
60
      if (!@ftp_put($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'.zip', $_FILES['dfile']['tmp_name'], FTP_BINARY))
65
      {
61
      {
66
        if ($conn_id) @ftp_quit($conn_id);
62
        if ($conn_id) @ftp_quit($conn_id);
67
        die($header.'<b>Fehler</b><br><br>Konnte ZIP-Datei nicht in tempor&auml;res Verzeichnis des Modules hineinkopieren (FTP)!.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
63
        die($header.'<b>Fehler</b><br><br>Konnte ZIP-Datei nicht in tempor&auml;res Verzeichnis des Modules hineinkopieren (FTP)!.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.urlencode($modul).'">Zur&uuml;ck</a>'.$footer);
68
      }
64
      }
69
      @ftp_site($conn_id, 'CHMOD 0644 '.$konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'.zip');
65
      @ftp_site($conn_id, 'CHMOD 0644 '.$konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'.zip');
70
 
66
 
71
      // Temporäres Verzeichnis für Extraktion erstellen
67
      // Temporäres Verzeichnis für Extraktion erstellen
72
      @ftp_rmdir_rec($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
68
      @ftp_rmdir_rec($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'/');
73
      @ftp_mkdir($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
69
      @ftp_mkdir($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'/');
74
      @ftp_site($conn_id, 'CHMOD 0755 '.$konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
70
      @ftp_site($conn_id, 'CHMOD 0755 '.$konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'/');
75
 
71
 
76
      // Entpacken zum Personal WebBase-Temp-Verzeichnis
72
      // Entpacken zum Personal WebBase-Temp-Verzeichnis
77
      if (file_exists('modules/'.$modul.'/dUnzip2.inc.php'))
73
      if (file_exists('modules/'.wb_dir_escape($modul).'/dUnzip2.inc.php'))
78
        include('modules/'.$modul.'/dUnzip2.inc.php');
74
        include('modules/'.wb_dir_escape($modul).'/dUnzip2.inc.php');
79
          $zip = new dUnzip2('modules/'.$modul.'/temp/'.$uid.'.zip');
75
          $zip = new dUnzip2('modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'.zip');
80
      $zip->unzipAll('modules/'.$modul.'/temp/'.$uid.'/', '', true);
76
      $zip->unzipAll('modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'/', '', true);
81
      $zip->close();
77
      $zip->close();
82
 
78
 
83
          // Temporäre Daten löschen
79
          // Temporäre Daten löschen
84
          @ftp_delete($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'.zip');
80
          @ftp_delete($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'.zip');
85
 
81
 
86
      // Wenn Verzeichnis leer ist, lässt es sich löschen. -> Fehler
82
      // Wenn Verzeichnis leer ist, lässt es sich löschen. -> Fehler
87
      $verzinh = @ftp_nlist($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
83
      $verzinh = @ftp_nlist($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'/');
88
      if (count($verzinh) == 0)
84
      if (count($verzinh) == 0)
89
      {
85
      {
90
        @ftp_rmdir_rec($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
86
        @ftp_rmdir_rec($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'/');
91
        if ($conn_id) @ftp_quit($conn_id);
87
        if ($conn_id) @ftp_quit($conn_id);
92
        die($header.'<b>Fehler</b><br><br>Dekompression entweder komplett misslungen oder ZIP-Datei war leer.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
88
        die($header.'<b>Fehler</b><br><br>Dekompression entweder komplett misslungen oder ZIP-Datei war leer.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.urlencode($modul).'">Zur&uuml;ck</a>'.$footer);
93
      }
89
      }
94
 
90
 
95
          // Verzeichnis verschieben
91
          // Verzeichnis verschieben
96
          if (!@ftp_rename($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/', $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$uid.'/'))
92
          if (!@ftp_rename($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'/', $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($uid).'/'))
97
          {
93
          {
98
        @ftp_rmdir_rec($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
94
        @ftp_rmdir_rec($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($modul).'/temp/'.wb_dir_escape($uid).'/');
99
        if ($conn_id) @ftp_quit($conn_id);
95
        if ($conn_id) @ftp_quit($conn_id);
100
        die($header.'<b>Fehler</b><br><br>Das Verschieben des Verzeichnisses ist misslungen!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
96
        die($header.'<b>Fehler</b><br><br>Das Verschieben des Verzeichnisses ist misslungen!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.urlencode($modul).'">Zur&uuml;ck</a>'.$footer);
101
          }
97
          }
102
 
98
 
103
          // Richtigen Dateinamen finden
99
          // Richtigen Dateinamen finden
104
          $fn = 'modules/'.$uid.'/ordnername.txt';
100
          $fn = 'modules/'.wb_dir_escape($uid).'/ordnername.txt';
105
          $fp = @fopen($fn, 'r');
101
          $fp = @fopen($fn, 'r');
106
          $inhalt = @fread($fp, @filesize($fn));
102
          $inhalt = @fread($fp, @filesize($fn));
107
      @fclose($fp);
103
      @fclose($fp);
108
 
104
 
109
      // Datei ordnername.txt im Zielmodul löschen
105
      // Datei ordnername.txt im Zielmodul löschen
110
      @ftp_delete ($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$uid.'/ordnername.txt');
106
      @ftp_delete ($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($uid).'/ordnername.txt');
111
 
107
 
112
      if ($inhalt != '')
108
      if ($inhalt != '')
113
      {
109
      {
114
        // Schutzverletzung im Ordnernamen?
110
        // Schutzverletzung im Ordnernamen?
115
        if (strpos($inhalt, '..'))
111
        if (strpos($inhalt, '..'))
116
        {
112
        {
117
          if ($conn_id) @ftp_quit($conn_id);
113
          if ($conn_id) @ftp_quit($conn_id);
118
          die($header.'<b>Fehler</b><br><br>Das Modul konnte zwar installiert werden, jedoch gab es bei der Umbenennung des Ordners eine Schutzverletzung!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
114
          die($header.'<b>Fehler</b><br><br>Das Modul konnte zwar installiert werden, jedoch gab es bei der Umbenennung des Ordners eine Schutzverletzung!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.urlencode($modul).'">Zur&uuml;ck</a>'.$footer);
119
        }
115
        }
120
 
116
 
121
        // Gibt es schon ein Modul mit dem Titel? Dann Alternativenamen finden
117
        // Gibt es schon ein Modul mit dem Titel? Dann Alternativenamen finden
122
        if (@ftp_chdir($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$inhalt.'/'))
118
        if (@ftp_chdir($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($inhalt).'/'))
123
        {
119
        {
124
          @ftp_cdup($conn_id);
120
          @ftp_cdup($conn_id);
125
          $zusatz = 2;
121
          $zusatz = 2;
126
          $problem = true;
122
          $problem = true;
127
          while (@ftp_chdir($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$inhalt.$zusatz.'/'))
123
          while (@ftp_chdir($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($inhalt).$zusatz.'/'))
128
          {
124
          {
129
            @ftp_cdup($conn_id);
125
            @ftp_cdup($conn_id);
130
            $zusatz++;
126
            $zusatz++;
131
          }
127
          }
132
        }
128
        }
Line 135... Line 131...
135
          $problem = false;
131
          $problem = false;
136
          $zusatz = '';
132
          $zusatz = '';
137
        }
133
        }
138
 
134
 
139
        // Ordner umbenennen
135
        // Ordner umbenennen
140
        $erfolg = @ftp_rename ($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$uid, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.$inhalt.$zusatz);
136
        $erfolg = @ftp_rename ($conn_id, $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($uid), $konfiguration['core_directftp']['ftp-verzeichnis'].'modules/'.wb_dir_escape($inhalt).$zusatz);
141
 
137
 
142
        // FTP-Verbindung trennen
138
        // FTP-Verbindung trennen
143
        if ($conn_id) @ftp_quit($conn_id);
139
        if ($conn_id) @ftp_quit($conn_id);
144
 
140
 
145
        // Wurde der Ordner nicht umbenannt? (z.B. Wenn der Ordnertitel nicht für Dateisystem zulässig war)
141
        // Wurde der Ordner nicht umbenannt? (z.B. Wenn der Ordnertitel nicht für Dateisystem zulässig war)
146
        if (!$erfolg)
142
        if (!$erfolg)
147
          die($header.'<b>Information</b><br><br>Das Modul konnte zwar installiert werden, jedoch gab es bei der Umbenennung des Ordners einen Fehler!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
143
          die($header.'<b>Information</b><br><br>Das Modul konnte zwar installiert werden, jedoch gab es bei der Umbenennung des Ordners einen Fehler!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.urlencode($modul).'">Zur&uuml;ck</a>'.$footer);
148
 
144
 
149
        // Wurde nur der Ordner nicht korrekt umbenannt? (z.B. wenn es ein Modul mit dem selben Namen noch gibt)
145
        // Wurde nur der Ordner nicht korrekt umbenannt? (z.B. wenn es ein Modul mit dem selben Namen noch gibt)
150
        if ($problem)
146
        if ($problem)
151
          die($header.'<b>Information</b><br><br>Es existiert bereits ein Modul mit dem Namen &quot;'.$inhalt.'&quot;. Das Modul wurde trotzdem unter dem alternativen Namen &quot;'.$inhalt.$zusatz.'&quot; installiert.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
147
          die($header.'<b>Information</b><br><br>Es existiert bereits ein Modul mit dem Namen &quot;'.$inhalt.'&quot;. Das Modul wurde trotzdem unter dem alternativen Namen &quot;'.$inhalt.$zusatz.'&quot; installiert.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.urlencode($modul).'">Zur&uuml;ck</a>'.$footer);
152
      }
148
      }
153
      else
149
      else
154
      {
150
      {
155
        // Kein Dateiname angegeben?
151
        // Kein Dateiname angegeben?
156
        if ($conn_id) @ftp_quit($conn_id);
152
        if ($conn_id) @ftp_quit($conn_id);
157
        die($header.'<b>Information</b><br><br>Das Modul wurde unter dem Namen &quot;'.$uid.'&quot; angelegt, da in der Moduldatei keine Namensangabe vorhanden war.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
153
        die($header.'<b>Information</b><br><br>Das Modul wurde unter dem Namen &quot;'.$uid.'&quot; angelegt, da in der Moduldatei keine Namensangabe vorhanden war.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=inhalt&amp;modul='.urlencode($modul).'">Zur&uuml;ck</a>'.$footer);
158
      }
154
      }
159
 
155
 
160
      // Alles OK? Dann zurück!
156
      // Alles OK? Dann zurück!
161
      if (!headers_sent()) header('location: '.$_SERVER['PHP_SELF'].'?seite=inhalt&modul='.$modul);
157
      if (!headers_sent()) header('location: '.$_SERVER['PHP_SELF'].'?seite=inhalt&modul='.urlencode($modul));
162
  }
158
  }
163
 
159
 
164
?>
160
?>