Sicherheitshaertung: Injection-Schutz, atomares Locking, Pfad-Validierung
- load_config blockiert Shell-Operatoren (;|&`) in .env-Werten - validate_path prueft Sonderzeichen und Path-Traversal in Pfad-Variablen - validate_config prüft DARKTABLE_BIN-basename und ruft validate_path auf - Lockdir-Trap erst nach erfolgreicher Lock-Akquisition registriert (verhindert dass externer Lockdir bei gescheitertem Lock entfernt wird) - uninstall.sh nutzt rmdir statt rm -rf fuer Lockdir - security.bats mit 10 Tests fuer alle Sicherheitsanforderungen Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,20 @@ load_config() {
|
||||
echo "Vorlage kopieren mit: cp .env.example $env_file" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Berechtigungen pruefen: .env darf nicht world-readable sein
|
||||
local perms
|
||||
perms=$(stat -c '%a' "$env_file" 2>/dev/null || stat -f '%A' "$env_file" 2>/dev/null)
|
||||
if [[ "${perms: -1}" != "0" ]]; then
|
||||
echo "Warnung: $env_file ist world-readable. Empfehlung: chmod 600 $env_file" >&2
|
||||
fi
|
||||
|
||||
# Zeilen mit Shell-Operatoren abweisen (Kommentare und Leerzeilen ignorieren)
|
||||
if grep -vE '^\s*#|^\s*$' "$env_file" | grep -qE '[;|&`]'; then
|
||||
echo "Fehler: $env_file enthaelt unerlaubte Zeichen (; | & \`). Bitte pruefen." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
. "$env_file"
|
||||
}
|
||||
@@ -23,6 +37,15 @@ require_var() {
|
||||
fi
|
||||
}
|
||||
|
||||
validate_path() {
|
||||
local var_name="$1" value="${!1:-}"
|
||||
# Pfade duerfen keine Shell-Sonderzeichen oder Path-Traversal enthalten
|
||||
if echo "$value" | grep -qE "['\";|&\`\$()\\\\]" || [[ "$value" == *".."* ]]; then
|
||||
echo "Fehler: '$var_name' enthaelt unerlaubte Zeichen: $value" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
validate_config() {
|
||||
require_var SERVER_IP
|
||||
require_var SERVER_USER
|
||||
@@ -33,6 +56,15 @@ validate_config() {
|
||||
require_var LOCAL_PHOTO_DIR
|
||||
require_var SYNC_BIN
|
||||
require_var DARKTABLE_BIN
|
||||
|
||||
validate_path SERVER_DB_DIR
|
||||
validate_path SERVER_PHOTO_DIR
|
||||
|
||||
# DARKTABLE_BIN: basename muss 'darktable' sein
|
||||
if [[ "$(basename "$DARKTABLE_BIN")" != "darktable" ]]; then
|
||||
echo "Fehler: DARKTABLE_BIN muss auf 'darktable' zeigen, nicht auf '$(basename "$DARKTABLE_BIN")'." >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_dependency() {
|
||||
|
||||
Reference in New Issue
Block a user