feat: Lösch-Synchronisation mit lokalem Backup und Bereinigung
Gelöschte Dateien werden beim Download ins Backup-Verzeichnis verschoben
(${LOCAL_PHOTO_DIR}-bak, ${LOCAL_DARKTABLE_DB_DIR}-bak) statt permanent
gelöscht. Upload verwendet --delete ohne Backup. Backups älter als 2 Jahre
werden automatisch bereinigt. Safeguard verhindert --delete bei leerem
Quellverzeichnis. validate_path prüft jetzt auch lokale Pfade.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,7 @@ setup() {
|
||||
touch "$HOME/.config/darktable/library.db"
|
||||
touch "$HOME/.config/darktable/data.db"
|
||||
mkdir -p "$HOME/Pictures"
|
||||
touch "$HOME/Pictures/test.jpg"
|
||||
export DISPLAY=:99
|
||||
}
|
||||
|
||||
@@ -241,3 +242,29 @@ EOF
|
||||
[ "$status" -eq 0 ]
|
||||
[ ! -f /tmp/evil_stub ]
|
||||
}
|
||||
|
||||
# --- Backup-Pfad Security ---
|
||||
|
||||
@test "security: LOCAL_PHOTO_DIR mit Path-Traversal wird geblockt" {
|
||||
create_valid_env
|
||||
echo "LOCAL_PHOTO_DIR=/home/user/../../../etc/photos" >> "$CONFIG_DIR/.env"
|
||||
run bash -c "source '$COMMON_SCRIPT'; load_config; validate_config"
|
||||
[ "$status" -eq 1 ]
|
||||
[[ "$output" == *"LOCAL_PHOTO_DIR"* ]]
|
||||
}
|
||||
|
||||
@test "security: LOCAL_DARKTABLE_DB_DIR mit Path-Traversal wird geblockt" {
|
||||
create_valid_env
|
||||
echo "LOCAL_DARKTABLE_DB_DIR=/home/user/../../../etc/dt" >> "$CONFIG_DIR/.env"
|
||||
run bash -c "source '$COMMON_SCRIPT'; load_config; validate_config"
|
||||
[ "$status" -eq 1 ]
|
||||
[[ "$output" == *"LOCAL_DARKTABLE_DB_DIR"* ]]
|
||||
}
|
||||
|
||||
@test "security: LOCAL_PHOTO_DIR mit Single-Quote wird geblockt" {
|
||||
create_valid_env
|
||||
printf 'LOCAL_PHOTO_DIR="/home/user/pics'"'"'injection"\n' >> "$CONFIG_DIR/.env"
|
||||
run bash -c "source '$COMMON_SCRIPT'; load_config; validate_config"
|
||||
[ "$status" -eq 1 ]
|
||||
[[ "$output" == *"LOCAL_PHOTO_DIR"* ]]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user