Dateien nach "/" hochladen

This commit is contained in:
Oliver Braasch committed 2026-09-18 10:29:39 +02:00
1 parent dccee3694a
commit f7e4833075
3 files changed
+555

No files matched your search

+129
View File
@@ -0,0 +1,129 @@
# Webserver absichern
Konfiguration für `software.obraasch.de`. CloudPanel arbeitet in der Regel mit
nginx — nimm den entsprechenden Abschnitt und lade danach neu.
Die Startseite `index.php` setzt ihre eigenen Header bereits selbst. Die
folgende Konfiguration deckt zusätzlich die statischen Dateien ab, also
auch `json-workbench.html` und die Rechtstexte.
---
## nginx
In den `server`-Block der Site einfügen:
```nginx
# --- Sicherheitsheader für alle Antworten ---
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
# HSTS erst aktivieren, wenn HTTPS sicher und dauerhaft läuft.
# Ein zu früh gesetzter Wert sperrt Besucher für die angegebene Dauer aus,
# falls das Zertifikat später Probleme macht.
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# --- Verstecktes und Sensibles nicht ausliefern ---
location ~ /\. {
deny all;
}
location ~* /(tool\.json|LICENSE|README\.md|\.md)$ {
deny all;
}
# Die Datenbank-Brücke enthält Zugangsdaten und darf nie als Quelltext
# ausgeliefert werden. Das passiert nur, wenn PHP ausfällt - deshalb
# zur Sicherheit ausdrücklich absichern:
location = /db-bridge.php {
# Beispiel: nur aus dem eigenen Netz erreichbar. Anpassen oder entfernen,
# wenn die Brücke von außen benutzt werden soll.
# allow 192.168.0.0/16;
# deny all;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
# --- Verzeichnislisten abschalten ---
autoindex off;
# --- Uploads klein halten ---
client_max_body_size 4m;
```
### Content-Security-Policy für das Werkzeug
Wenn die Bibliotheken lokal in `lib/` liegen, kannst du die Regeln eng ziehen.
`unsafe-inline` ist nötig, weil Stile und Skript direkt in der HTML-Datei
stehen; `unsafe-eval` benötigt der JSON-Editor für seine Abfragesprache.
```nginx
location /json-workbench/ {
add_header Content-Security-Policy
"default-src 'self'; \
script-src 'self' 'unsafe-inline' 'unsafe-eval'; \
style-src 'self' 'unsafe-inline'; \
img-src 'self' data:; \
font-src 'self'; \
connect-src *; \
frame-ancestors 'none'; \
base-uri 'none'" always;
}
```
`connect-src *` ist Absicht: URL-Import, Webhook und Datenbankanbindung
sprechen Adressen an, die die Nutzer selbst eingeben. Willst du das
einschränken, trage statt `*` die erlaubten Ziele ein — dann funktionieren
diese drei Funktionen nur noch mit diesen Zielen.
Lädst du die Bibliotheken doch vom CDN, ergänze bei `script-src` und
`style-src` zusätzlich `https://cdn.jsdelivr.net`.
---
## Apache (.htaccess)
```apache
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()"
Header always set Cross-Origin-Opener-Policy "same-origin"
# Erst aktivieren, wenn HTTPS dauerhaft steht:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
# Verzeichnislisten abschalten
Options -Indexes
# Versteckte Dateien und Metadaten schützen
<FilesMatch "^\.|(tool\.json|LICENSE|README\.md)$">
Require all denied
</FilesMatch>
# Nur nötig, falls die Domain nicht ohnehin auf HTTPS zwingt
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
```
---
## Noch ein paar Punkte
- **PHP-Version aktuell halten.** `index.php` und `db-bridge.php` brauchen
mindestens PHP 8.0.
- **Fehlermeldungen nicht anzeigen.** In der `php.ini` produktiv
`display_errors = Off` und `log_errors = On`. Eine PHP-Fehlermeldung verrät
sonst Pfade und unter Umständen Zugangsdaten.
- **Keine Backup-Dateien im Web-Verzeichnis.** Dateien wie
`db-bridge.php.bak` oder `index.php~` werden als Klartext ausgeliefert. Der
Editor-Ordner `.git` gehört ebenfalls nicht auf den Webserver — die
`\.`-Regel oben fängt das ab.
- **Automatische Zertifikatserneuerung prüfen**, bevor du HSTS einschaltest.
- **Logfile-Aufbewahrung** an das anpassen, was in der Datenschutzerklärung
steht. Beides muss zusammenpassen.