Dateien nach "/" hochladen
This commit is contained in:
1 parent
dccee3694a
commit
f7e4833075
3 files changed
+555
No files matched your search
@@ -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.
|
||||
Reference in new issue
Block a user