fix #547: secure VM deployment behind HTTPS proxy
This commit is contained in:
52
scripts/test-backoffice-https-config.sh
Executable file
52
scripts/test-backoffice-https-config.sh
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
. "$ROOT/scripts/configure-backoffice-https-vm.sh"
|
||||
|
||||
assert_rejected() {
|
||||
local label="${1:?label}" function_name="${2:?function}" value="${3:-}"
|
||||
if ("$function_name" "$value") >/dev/null 2>&1; then
|
||||
echo "FAIL: $label was accepted: $value" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
validate_public_host "admin.example.com"
|
||||
validate_public_host "130.162.134.59"
|
||||
validate_tls_email "ops@example.com"
|
||||
validate_ssh_host "hermes"
|
||||
validate_ipv4 "130.162.134.59"
|
||||
validate_port "8082"
|
||||
validate_remote_dir '$HOME/apps/vpd-backoffice'
|
||||
|
||||
assert_rejected "invalid IPv4 host" validate_public_host "130.162.134.999"
|
||||
assert_rejected "wildcard host" validate_public_host "*.example.com"
|
||||
assert_rejected "single-label host" validate_public_host "hermes"
|
||||
assert_rejected "invalid email" validate_tls_email "ops at example.com"
|
||||
assert_rejected "SSH option injection" validate_ssh_host "-oProxyCommand=id"
|
||||
assert_rejected "invalid IPv4" validate_ipv4 "130.162.134.999"
|
||||
assert_rejected "privileged overflow port" validate_port "65536"
|
||||
assert_rejected "remote command injection" validate_remote_dir '$HOME/apps/x;id'
|
||||
assert_rejected "remote path traversal" validate_remote_dir '$HOME/apps/../etc'
|
||||
|
||||
tmp_dir="$(mktemp -d "${TMPDIR:-/tmp}/vpd-backoffice-https-test.XXXXXX")"
|
||||
trap 'rm -rf "$tmp_dir"' EXIT
|
||||
PUBLIC_HOST="admin.example.com"
|
||||
TLS_EMAIL="ops@example.com"
|
||||
APP_PORT="8082"
|
||||
render_caddyfile "$tmp_dir/Caddyfile"
|
||||
|
||||
grep -Fq 'admin.example.com {' "$tmp_dir/Caddyfile"
|
||||
grep -Fq 'email ops@example.com' "$tmp_dir/Caddyfile"
|
||||
grep -Fq 'reverse_proxy 127.0.0.1:8082' "$tmp_dir/Caddyfile"
|
||||
grep -Fq 'Strict-Transport-Security "max-age=31536000; includeSubDomains"' "$tmp_dir/Caddyfile"
|
||||
|
||||
PUBLIC_HOST="130.162.134.59"
|
||||
render_caddyfile "$tmp_dir/Caddyfile.ip"
|
||||
grep -Fq '130.162.134.59 {' "$tmp_dir/Caddyfile.ip"
|
||||
grep -Fq 'profile shortlived' "$tmp_dir/Caddyfile.ip"
|
||||
|
||||
echo "PASS: HTTPS configuration validation and rendering"
|
||||
Reference in New Issue
Block a user