Online Backup-Script
Re: Online Backup-Script
Nach Entfernung der color-Einträge erhalte ich (diesmal xampp 7.0.18)
Invalid or uninitialized Zip object - für die Zeilen mit
$archive->close();
$archive->addFile($it->key(), $it->getSubPathName());
$archive->close();
Es ist doch ../../Backup/Sicherung-{$date} definiert - also eine Dateiname ' Sicherung-Datum.zip' - wo muss ich was eintragen ?
Hat das nicht etwas mit $archive = new ZipArchive(); zu tun ? Bitte mal ein Beispiel.
Invalid or uninitialized Zip object - für die Zeilen mit
$archive->close();
$archive->addFile($it->key(), $it->getSubPathName());
$archive->close();
Es ist doch ../../Backup/Sicherung-{$date} definiert - also eine Dateiname ' Sicherung-Datum.zip' - wo muss ich was eintragen ?
Hat das nicht etwas mit $archive = new ZipArchive(); zu tun ? Bitte mal ein Beispiel.
Re: Online Backup-Script
Wenn die CMSimple_XH Installation im Webroot installiert ist, dann bedeutet ../../ zwei Verzeichnisse weiter hoch. Das dürfte i.d.R. nicht funktionieren – manchmal kann man nicht mal ein Verzeichnis nach oben, oder aber eben nur eines. Probiere es im Zweifel mal mit einem Punkt ("./Sicherung-{$date}_$part.zip"). Das sollte die ZIP-Datei(en) im CMSimple_XH Installationsverzeichnis ablegen. Auf Dauer macht das aber keinen Sinn, da sonst die Sicherungen immer wieder mitgesichert werden.cmss wrote:Es ist doch ../../Backup/Sicherung-{$date} definiert - also eine Dateiname ' Sicherung-Datum.zip' - wo muss ich was eintragen ?
Christoph M. Becker – Plugins for CMSimple_XH
Re: Online Backup-Script
Mit ./Backup ( statt ../../Backup ) geht es zwar , und eine Sicherung (in mehreren Teilen) inclusive .htaccess liegt im Verzeichnis /Backup. Ich erhalte aber die Fehlermeldung
Fatal error: Maximum execution time of 30 seconds exceeded in H:\Xampp718\x718\htdocs\xh1610clea2_\cmsimple\userfuncs.php on line 79 --- Dort steht : $part++;
<IfModule mod_php5.c> php_value max_execution_time 100 </IfModule> zur htaccess hinzugefügt hilft bei Xampp manchmal(bei php7 <IfModule mod_php7.c) .
Das Verzeichnis /backup wird danach leider mitverpackt... Irgendwie müsste man die Absicherung dieses Verzeichnisses ausschliessen - evtl. über getSubPathName
(Die von mir gesuchte Klasse ZipArchive() ist im PHP definierthttps://secure.php.net/manual/de/class.ziparchive.php?)
Fatal error: Maximum execution time of 30 seconds exceeded in H:\Xampp718\x718\htdocs\xh1610clea2_\cmsimple\userfuncs.php on line 79 --- Dort steht : $part++;
<IfModule mod_php5.c> php_value max_execution_time 100 </IfModule> zur htaccess hinzugefügt hilft bei Xampp manchmal(bei php7 <IfModule mod_php7.c) .
Das Verzeichnis /backup wird danach leider mitverpackt... Irgendwie müsste man die Absicherung dieses Verzeichnisses ausschliessen - evtl. über getSubPathName
(Die von mir gesuchte Klasse ZipArchive() ist im PHP definierthttps://secure.php.net/manual/de/class.ziparchive.php?)
Re: Online Backup-Script
Ggf. muss die maximale Ausführungszeit noch größer angesetzt werden.cmss wrote:Fatal error: Maximum execution time of 30 seconds exceeded in H:\Xampp718\x718\htdocs\xh1610clea2_\cmsimple\userfuncs.php on line 79 --- Dort steht : $part++;
<IfModule mod_php5.c> php_value max_execution_time 100 </IfModule> zur htaccess hinzugefügt hilft bei Xampp manchmal(bei php7 <IfModule mod_php7.c) .
Eleganter ist es, wenn eben das bzw. die Backups oberhalb des Webroot abgelegt werden. Das sorgt dann auch gleich dafür, dass niemand per HTTP(S) auf diese Datei(en) zugreifen kann. Unter XAMPP also ../Backup ö.ä. Wenn das auf dem Webspace ebenfalls möglich ist, umso besser.cmss wrote:Das Verzeichnis /backup wird danach leider mitverpackt... Irgendwie müsste man die Absicherung dieses Verzeichnisses ausschliessen - evtl. über getSubPathName
Christoph M. Becker – Plugins for CMSimple_XH
Re: Online Backup-Script
php_value max_execution_time 100 reicht schon (bei manchen Servern evtl. nicht)
Das ../Backup geht im Web nicht. Ausserdem kann man dann schlecht per Plugin herunterladen. Man könnte natürlich über einer Servervariable arbeiten , die den Pfad /.../.../htdocs/ bzw var/www beinhaltet ($bk = $_SERVER['DOCUMENT_ROOT']) und dann /Backup - was einige CMSsse schon bei der Installation fordern(statt selbst zu erstellen)
Man müsste bei Verwendung von /Backup einen Code zwischenschalten, der das Verzeichnis Backup auslässt : if SubPathName backup then..
Der Angreifer kennt doch den Namen wegen des Datums gar nicht. Ausserdem kann man über 644 die Rechte einschränken.
Man könnte alternativ im ./userfiles abspeichern. Dann kann man im Filemanager oben auf 'Dateien' klicken und herunterladen und über das x löschen. Das ist wohl am einfachsten.
Das ../Backup geht im Web nicht. Ausserdem kann man dann schlecht per Plugin herunterladen. Man könnte natürlich über einer Servervariable arbeiten , die den Pfad /.../.../htdocs/ bzw var/www beinhaltet ($bk = $_SERVER['DOCUMENT_ROOT']) und dann /Backup - was einige CMSsse schon bei der Installation fordern(statt selbst zu erstellen)
Man müsste bei Verwendung von /Backup einen Code zwischenschalten, der das Verzeichnis Backup auslässt : if SubPathName backup then..
Der Angreifer kennt doch den Namen wegen des Datums gar nicht. Ausserdem kann man über 644 die Rechte einschränken.
Man könnte alternativ im ./userfiles abspeichern. Dann kann man im Filemanager oben auf 'Dateien' klicken und herunterladen und über das x löschen. Das ist wohl am einfachsten.
Re: Online Backup-Script
Ja, das könnte man machen.cmss wrote:Man müsste bei Verwendung von /Backup einen Code zwischenschalten, der das Verzeichnis Backup auslässt : if SubPathName backup then..
Christoph M. Becker – Plugins for CMSimple_XH
Re: Online Backup-Script
Hier mal ein funktionierendes Script für 'userfiles' . Aufruf mit ?backup , herunterladen im Menü über 'Datei'.
PS. Neu : Abschlussmeldung angehängt.
Code: Select all
function fullBackup()
{
global $pth, $o;
$maxsize = 200000000;
$part = 1;
$date = date('Y-m-d');
$archive = new ZipArchive();
$archive->open(
"./userfiles/Sicherung-{$date}_$part.zip",
ZipArchive::CREATE
);
$totalSize = 0;
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($pth['folder']['base'])
);
$it->rewind();
while ($it->valid()) {
if (!$it->isDot() && $it->key() != $pth['folder']['base'] . 'backup.zip') {
$size = filesize($it->key());
if ($totalSize + $size > $maxsize) {
$archive->close();
$part++;
$archive->open(
"./userfiles/Sicherung-{$date}_$part.zip",
ZipArchive::CREATE
);
$totalSize = 0;
}
$archive->addFile($it->key(), $it->getSubPathName());
$totalSize += $size;
}
$it->next();
}
$archive->close();
}
if (XH_ADM && isset($_GET['backup'])) {
fullBackup();
$GLOBALS['o'] .= XH_message('success', 'Backup beendet');
}
Re: Online Backup-Script
Hier ist zu beachten, dass beliebige User das Backup herunter laden können, wenn sie den Dateinamen erraten, was natürlich äußerst problematisch ist. Will man zwecks bequemem Download die Backups unbedingt in userfiles/ speichern, dann sollte man entweder ein verschlüsseltes Archiv erstellen, was allerdings erst ab PHP 7.2.0 und libzip 1.2.0 (die vorhandenen Versionen können unter Einstellungen → Info → PHP-Info überprüft werden) unterstützt wird (siehe http://php.net/manual/de/ziparchive.set ... word-notes), oder aber dafür sorgen, dass der Dateiname nicht erraten werden kann (z.B. indem man einen kryptographischen Zufallswert einbaut).
Hier einmal eine Variante, die ein verschlüsseltes Archiv erstellet. Aufzurufen per ?backup=<password> (also z.B. ?backup=test, wobei just dieses Passwort keine gute Idee ist):
Code: Select all
<?php
function fullBackup($password)
{
global $pth, $o;
$maxsize = 200000000;
$part = 1;
$date = date('Y-m-d');
$archive = new ZipArchive();
$archive->open(
"./userfiles/Sicherung-{$date}_$part.zip",
ZipArchive::CREATE | ZipArchive::OVERWRITE
);
$archive->setPassword($password);
$totalSize = 0;
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($pth['folder']['base']),
RecursiveIteratorIterator::SELF_FIRST
);
$it->rewind();
while ($it->valid()) {
if (!$it->isDot() && !preg_match('/Sicherung-\d{4}-\d{2}-\d{2}_\d+.zip$/', $it->key())) {
$size = filesize($it->key());
if ($totalSize + $size > $maxsize) {
$archive->close();
$part++;
$archive->open(
"./userfiles/Sicherung-{$date}_$part.zip",
ZipArchive::CREATE
);
$totalSize = 0;
}
if (is_dir($it->key())) {
$archive->addEmptyDir($it->getSubPathName());
} else {
$archive->addFile($it->key(), $it->getSubPathName());
}
$archive->setEncryptionName($it->getSubPathName(), ZipArchive::EM_AES_256);
$totalSize += $size;
}
$it->next();
}
$archive->close();
}
if (XH_ADM && !empty($_GET['backup'])) {
fullBackup($_GET['backup']);
$o .= XH_message('success', 'Backup beendet');
}
Last edited by cmb on Tue Jul 24, 2018 11:47 am, edited 2 times in total.
Reason: Fix script to include also empty folders
Reason: Fix script to include also empty folders
Christoph M. Becker – Plugins for CMSimple_XH
-
- Posts: 608
- Joined: Sat Jul 28, 2012 11:38 am
- Location: Perle der Grafschaft > 127.0.0.1
Re: Online Backup-Script
Hallo,
nach langer Zeit melde ich mich auch mal wieder
Eine dumme Frage, aber wenn die Backups in "userfiles"gespeichert werden, wird dann dieses Verzeichnis beim Erstellen komplett ausgeklammert?
Wäre da ein Verzeichnis, welches ausserhalb der "Homepage" liegt nicht sinniger, bzw ein direktes Verschieben auf ein lokales NAS?
nach langer Zeit melde ich mich auch mal wieder
Eine dumme Frage, aber wenn die Backups in "userfiles"gespeichert werden, wird dann dieses Verzeichnis beim Erstellen komplett ausgeklammert?
Wäre da ein Verzeichnis, welches ausserhalb der "Homepage" liegt nicht sinniger, bzw ein direktes Verschieben auf ein lokales NAS?
Re: Online Backup-Script
userfiles/ ist im Backup enthalten, und nachdem ich am obigen Skript noch etwas nachgebessert habe, werden vorhandene Sicherungen aber nicht noch einmal gesichert.Der Zwerch wrote: ↑Sun Jul 22, 2018 4:17 pmEine dumme Frage, aber wenn die Backups in "userfiles"gespeichert werden, wird dann dieses Verzeichnis beim Erstellen komplett ausgeklammert?
Ja, das ist IMHO besser (Script siehe viewtopic.php?f=16&t=12191#p56515). Allerdings kann ich verstehen, wenn User eben eine bequeme Downloadmöglichkeit für die Sicherungen haben möchten, und da ein kürzlich erstellter Knowledge-Base-Eintrag auf cmsss Skript verweist, wollte ich die Sicherheitsproblematik aufzeigen (außerdem wollte ich verschlüsselte Zips schon länger mal ausprobieren).Der Zwerch wrote: ↑Sun Jul 22, 2018 4:17 pmWäre da ein Verzeichnis, welches ausserhalb der "Homepage" liegt nicht sinniger, bzw ein direktes Verschieben auf ein lokales NAS?
Christoph M. Becker – Plugins for CMSimple_XH