Sicherheit: Erkennung des lokalen Netzes ueber konfigurierte Netze

isLocal() hielt jede Adresse aus 192.168.147.* fuer lokal. Das ist das
Docker-Netz auf dem NAS: Anfragen ueber den Docker- oder einen Reverse
Proxy tragen dessen Adresse und waeren damit als lokal durchgegangen
(Passwort-Login und Passkey-Freigabe von aussen). Der IPv6-Vergleich per
explode(":") scheiterte ausserdem an komprimierten Adressen.

- lokale Netze stehen als CIDR-Liste $lokale_netze in der externen Config
- ipImNetz() vergleicht IPv4/IPv6 korrekt per inet_pton, inkl. ::ffff:-Form
- Anfragen mit Proxy-Headern gelten nie als lokal
- ohne Konfiguration nur noch dasselbe IPv6-/64 wie der Server, kein IPv4

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-17 10:17:00 +02:00
co-authored by Claude Opus 5
parent a6758ae63b
commit 7dd6580bcc
3 changed files with 72 additions and 7 deletions
+3
View File
@@ -38,6 +38,7 @@ if(!file_put_contents (CONFIG_PATH.CONFIG_FILE,
global $openweathermap_appid;
global $aeris_client_id;
global $aeris_client_secret;
global $lokale_netze;
$instanz = '.var_export(INSTANZ, true).';
$dbconn = 0;
@@ -60,6 +61,8 @@ if(!file_put_contents (CONFIG_PATH.CONFIG_FILE,
$openweathermap_appid = "";
$aeris_client_id = "";
$aeris_client_secret = "";
// Netze, aus denen Passwort-Login erlaubt ist (CIDR). Nie das Docker-Netz!
$lokale_netze = array();
?>'))
{
$err= error("Konfiguration konnte nicht geschrieben werden!");