Konfiguracja bezpieczeństwa
Konfiguracja bezpieczeństwa XOOPS
Dział zatytułowany „Konfiguracja bezpieczeństwa XOOPS”Kompleksowy przewodnik zabezpieczania instalacji XOOPS przed powszechnymilukami w bezpieczeństwie sieci.
Checklist bezpieczeństwa
Dział zatytułowany „Checklist bezpieczeństwa”Przed uruchomieniem witryny wdrażaj te środki bezpieczeństwa:
- Uprawnienia do plików ustawione poprawnie (644/755)
- Folder instalacji usunięty lub chroniony
- mainfile.php chroniony przed modyfikacją
- SSL/HTTPS włączony na wszystkich stronach
- Folder administracyjny przemianowany lub chroniony
- Poufne pliki niedostępne sieciowo
- Ograniczenia .htaccess w miejscu
- Automatyczne kopie zapasowe
- Nagłówki bezpieczeństwa skonfigurowane
- Ochrona CSRF włączona
- Ochrony przed wstrzyknięciami SQL aktywne
- Moduły/rozszerzenia zaktualizowane
Bezpieczeństwo systemu plików
Dział zatytułowany „Bezpieczeństwo systemu plików”Uprawnienia do plików
Dział zatytułowany „Uprawnienia do plików”Prawidłowe uprawnienia do plików są krytyczne dla bezpieczeństwa.
Wytyczne dotyczące uprawnień
Dział zatytułowany „Wytyczne dotyczące uprawnień”| Ścieżka | Uprawnienia | Właściciel | Powód |
|---|---|---|---|
| mainfile.php | 644 | root | Zawiera poświadczenia BD |
| pliki *.php | 644 | root | Zapobiegaj nieautoryzowanej modyfikacji |
| Katalogi | 755 | root | Zezwól na czytanie, zapobiegnij pisaniu |
| cache/ | 777 | www-data | Serwer www musi pisać |
| templates_c/ | 777 | www-data | Skompilowane szablony |
| uploads/ | 777 | www-data | Przesyłanie przez użytkownika |
| var/ | 777 | www-data | Dane zmienne |
| install/ | Usuń | - | Usuń po instalacji |
| configs/ | 755 | root | Czytelne, nie do zapisu |
Skrypt ustawiania uprawnień
Dział zatytułowany „Skrypt ustawiania uprawnień”#!/bin/bashXOOPS_PATH="/var/www/html/xoops"WEB_USER="www-data"
# Ustaw własnośćecho "Ustawianie własności..."chown -R $WEB_USER:$WEB_USER $XOOPS_PATH
# Ustaw restrykcyjne uprawnienia domyślneecho "Ustawianie uprawnień podstawowych..."find $XOOPS_PATH -type d -exec chmod 755 {} \;find $XOOPS_PATH -type f -exec chmod 644 {} \;
# Ustaw określone katalogi jako zapisywalneecho "Ustawianie katalogów z możliwością zapisu..."chmod 777 $XOOPS_PATH/cachechmod 777 $XOOPS_PATH/templates_cchmod 777 $XOOPS_PATH/uploadschmod 777 $XOOPS_PATH/var
# Chroń wrażliwe plikiecho "Ochrona wrażliwych plików..."chmod 644 $XOOPS_PATH/mainfile.phpchmod 444 $XOOPS_PATH/mainfile.php.dist # Jeśli istnieje (tylko do odczytu)
# Weryfikuj uprawnieniaecho "Weryfikowanie uprawnień..."ls -la $XOOPS_PATH | grep -E "mainfile|cache|uploads|var|templates_c"
echo "Wzmacnianie bezpieczeństwa ukończone!"Uruchom skrypt:
chmod +x /usr/local/bin/xoops-secure.sh/usr/local/bin/xoops-secure.shUsuń folder instalacji
Dział zatytułowany „Usuń folder instalacji”KRYTYCZNE: Folder instalacji musi być usunięty po instalacji!
# Opcja 1: Usuń całkowicierm -rf /var/www/html/xoops/install/
# Opcja 2: Zmień nazwę i zachowaj do referencjimv /var/www/html/xoops/install/ /var/www/html/xoops/install.bak/
# Weryfikuj usunięciels -la /var/www/html/xoops/ | grep installChroń katalogi wrażliwe
Dział zatytułowany „Chroń katalogi wrażliwe”Utwórz pliki .htaccess aby zablokować dostęp sieciowy do poufnych folderów:
Plik: /var/www/html/xoops/var/.htaccess
<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar)$"> Deny from all</FilesMatch>
<IfModule mod_autoindex.c> Options -Indexes</IfModule>Plik: /var/www/html/xoops/templates_c/.htaccess
<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar)$"> Deny from all</FilesMatch>
Options -IndexesPlik: /var/www/html/xoops/cache/.htaccess
Options -Indexes<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7)$"> Deny from all</FilesMatch>Chroń katalog przesyłania
Dział zatytułowany „Chroń katalog przesyłania”Zapobiegaj wykonywaniu skryptów w przesyłaniach:
Plik: /var/www/html/xoops/uploads/.htaccess
# Zapobiegaj wykonywaniu skryptów<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar|pl|py|jsp|asp|aspx|cgi|sh|bat|exe)$"> Deny from all</FilesMatch>
# Zapobiegaj wylistowaniu kataloguOptions -Indexes
# Dodatkowa ochrona<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /xoops/uploads/
# Blokuj podejrzane pliki RewriteCond %{REQUEST_URI} \.(php|phtml|php3|php4|php5|php6|php7)$ [NC] RewriteRule ^.*$ - [F,L]</IfModule>Konfiguracja SSL/HTTPS
Dział zatytułowany „Konfiguracja SSL/HTTPS”Szyfruj cały ruch pomiędzy użytkownikami a serwerem.
Uzyskaj certyfikat SSL
Dział zatytułowany „Uzyskaj certyfikat SSL”Opcja 1: Bezpłatny certyfikat z Let’s Encrypt
# Zainstaluj Certbotapt-get install certbot python3-certbot-apache
# Uzyskaj certyfikat (automatycznie konfiguruje Apache)certbot certonly --apache -d your-domain.com -d www.your-domain.com
# Weryfikuj zainstalowany certyfikatls /etc/letsencrypt/live/your-domain.com/Opcja 2: Komercyjny certyfikat SSL
Skontaktuj się z dostawcą SSL lub rejestratorem:
- Kup certyfikat SSL
- Weryfikuj własność domeny
- Zainstaluj pliki certyfikatu na serwerze
- Skonfiguruj serwer internetowy
Konfiguracja SSL Apache
Dział zatytułowany „Konfiguracja SSL Apache”Utwórz wirtualnego hosta HTTPS:
Plik: /etc/apache2/sites-available/xoops-ssl.conf
<VirtualHost *:443> ServerName your-domain.com ServerAlias www.your-domain.com DocumentRoot /var/www/html/xoops
# Konfiguracja SSL SSLEngine on SSLProtocol TLSv1.2 TLSv1.3 SSLCipherSuite HIGH:!aNULL:!MD5 SSLCertificateFile /etc/letsencrypt/live/your-domain.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/your-domain.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/your-domain.com/chain.pem
# Nagłówki bezpieczeństwa Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" Header always set X-Content-Type-Options "nosniff" Header always set X-Frame-Options "SAMEORIGIN" Header always set X-XSS-Protection "1; mode=block" Header always set Referrer-Policy "no-referrer-when-downgrade" Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'"
<Directory /var/www/html/xoops> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory>
# Ograniczaj folder instalacji <Directory /var/www/html/xoops/install> Deny from all </Directory>
# Rejestrowanie ErrorLog ${APACHE_LOG_DIR}/xoops_ssl_error.log CustomLog ${APACHE_LOG_DIR}/xoops_ssl_access.log combined</VirtualHost>
# Przekieruj HTTP do HTTPS<VirtualHost *:80> ServerName your-domain.com ServerAlias www.your-domain.com Redirect 301 / https://your-domain.com/</VirtualHost>Włącz konfigurację:
# Włącz moduł SSLa2enmod ssl
# Włącz witrynęa2ensite xoops-ssl
# Wyłącz witrynę bez SSL jeśli istniejea2dissite 000-default
# Przetestuj konfiguracjęapache2ctl configtest# Powinno wyjść: Syntax OK
# Uruchom Apache ponowniesystemctl restart apache2Konfiguracja SSL Nginx
Dział zatytułowany „Konfiguracja SSL Nginx”Plik: /etc/nginx/sites-available/xoops
# Przekieruj HTTP do HTTPSserver { listen 80; listen [::]:80; server_name your-domain.com www.your-domain.com;
location / { return 301 https://$server_name$request_uri; }}
# Serwer HTTPSserver { listen 443 ssl http2; listen [::]:443 ssl http2;
server_name your-domain.com www.your-domain.com; root /var/www/html/xoops; index index.php index.html;
# Konfiguracja certyfikatu SSL ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# Nowoczesna konfiguracja SSL ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
# Nagłówek HSTS add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# Nagłówki bezpieczeństwa add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'" always;
# Ograniczaj folder instalacji location ~ ^/(install|upgrade)/ { deny all; }
# Odrzuć dostęp do wrażliwych plików location ~ /\. { deny all; }
# Backend PHP-FPM location ~ \.php$ { fastcgi_pass unix:/run/php-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
# Buforowanie plików statycznych location ~* \.(js|css|png|jpg|gif|ico|svg)$ { expires 30d; add_header Cache-Control "public, immutable"; }
# Przepisywanie adresu URL location / { try_files $uri $uri/ /index.php?$query_string; }
# Rejestrowanie access_log /var/log/nginx/xoops_access.log; error_log /var/log/nginx/xoops_error.log;}Włącz konfigurację:
ln -s /etc/nginx/sites-available/xoops /etc/nginx/sites-enabled/nginx -tsystemctl restart nginxWeryfikuj instalację HTTPS
Dział zatytułowany „Weryfikuj instalację HTTPS”# Przetestuj konfigurację SSLopenssl s_client -connect your-domain.com:443 -tls1_2
# Sprawdź ważność certyfikatuopenssl x509 -in /etc/letsencrypt/live/your-domain.com/cert.pem -noout -text
# Test SSL/TLS online# https://www.ssllabs.com/ssltest/# https://www.testssl.sh/Automatyczne odnowienie certyfikatu Let’s Encrypt
Dział zatytułowany „Automatyczne odnowienie certyfikatu Let’s Encrypt”# Włącz automatyczne odnowieniesystemctl enable certbot.timersystemctl start certbot.timer
# Przetestuj proces odnowieniacertbot renew --dry-run
# Ręczne odnowienie jeśli potrzebacertbot renew --force-renewalBezpieczeństwo aplikacji webowej
Dział zatytułowany „Bezpieczeństwo aplikacji webowej”Ochrona przed wstrzykiwaniem SQL
Dział zatytułowany „Ochrona przed wstrzykiwaniem SQL”XOOPS używa sparametryzowanych zapytań (domyślnie bezpieczne), ale zawsze:
// NIEBEZPIECZNE - Nigdy tego nie rób!$query = "SELECT * FROM users WHERE name = '" . $_GET['name'] . "'";
// BEZPIECZNE - Użyj przygotowanych stwierdzeń$database = XoopsDatabaseFactory::getDatabaseConnection();$sql = "SELECT * FROM " . $database->prefix('users') . " WHERE name = ?";$result = $database->query($sql, array($_GET['name']));Zapobieganie Cross-Site Scripting (XSS)
Dział zatytułowany „Zapobieganie Cross-Site Scripting (XSS)”Zawsze oczyszczaj dane wejściowe użytkownika:
// NIEBEZPIECZNEecho $_GET['user_input'];
// BEZPIECZNE - Użyj funkcji dezynfekcji XOOPSecho htmlspecialchars($_GET['user_input'], ENT_QUOTES, 'UTF-8');
// Lub użyj funkcji XOOPS$text_sanitizer = new xoops_text_sanitizer();echo $text_sanitizer->stripSlashesGPC($_GET['user_input']);Zapobieganie Cross-Site Request Forgery (CSRF)
Dział zatytułowany „Zapobieganie Cross-Site Request Forgery (CSRF)”XOOPS zawiera ochronę przed tokenami CSRF. Zawsze dołączaj tokeny:
<!-- W formularzach --><form method="post"> {xoops_token form=update} <input type="text" name="field"> <input type="submit"></form>Wyłącz wykonywanie PHP w folderze przesyłania
Dział zatytułowany „Wyłącz wykonywanie PHP w folderze przesyłania”Zapobiegaj atakującym przesyłaniu i wykonywaniu PHP:
# Utwórz .htaccess w folderze uploadscat > /var/www/html/xoops/uploads/.htaccess << 'EOF'<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7)$"> Deny from all</FilesMatch>php_flag engine offEOF
# Alternatywa: Wyłącz wykonywanie globalnie w uploadschmod 444 /var/www/html/xoops/uploads/ # Tylko do odczytuNagłówki bezpieczeństwa
Dział zatytułowany „Nagłówki bezpieczeństwa”Skonfiguruj ważne nagłówki bezpieczeństwa HTTP:
# Strict-Transport-Security (HSTS)# Wymusza HTTPS przez 1 rokHeader always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# X-Content-Type-Options# Zapobiega wykrywaniu typów MIMEHeader always set X-Content-Type-Options "nosniff"
# X-Frame-Options# Zapobiega atakom clickjackingHeader always set X-Frame-Options "SAMEORIGIN"
# X-XSS-Protection# Ochrona XSS przeglądarkiHeader always set X-XSS-Protection "1; mode=block"
# Referrer-Policy# Kontroluje informacje refereraHeader always set Referrer-Policy "strict-origin-when-cross-origin"
# Content-Security-Policy# Kontroluje ładowanie zasobówHeader always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'"Bezpieczeństwo panelu administracyjnego
Dział zatytułowany „Bezpieczeństwo panelu administracyjnego”Zmień nazwę folderu administracyjnego
Dział zatytułowany „Zmień nazwę folderu administracyjnego”Chroń folder administracyjny poprzez zmianę jego nazwy:
# Zmień nazwę folderu administracyjnegomv /var/www/html/xoops/admin /var/www/html/xoops/myadmin123
# Zaktualizuj adres URL dostępu administratora# Stary: http://your-domain.com/xoops/admin/# Nowy: http://your-domain.com/xoops/myadmin123/Skonfiguruj XOOPS do korzystania z zmienionego folderu:
Edytuj mainfile.php:
// Zmień tę liniędefine('XOOPS_ADMIN_PATH', '/var/www/html/xoops/myadmin123');Białe listy IP dla administracji
Dział zatytułowany „Białe listy IP dla administracji”Ograniczaj dostęp administratora do określonych adresów IP:
Plik: /var/www/html/xoops/myadmin123/.htaccess
# Zezwól tylko na określone adresy IP<RequireAll> Require ip 192.168.1.100 # Twój IP biura Require ip 203.0.113.50 # Twój IP domu Deny from all</RequireAll>Lub z Apache 2.2:
Order Deny,AllowDeny from allAllow from 192.168.1.100 203.0.113.50Silne poświadczenia administracyjne
Dział zatytułowany „Silne poświadczenia administracyjne”Wymusź silne hasła dla administratorów:
- Użyj co najmniej 16 znaków
- Mieszaj wielkie, małe, cyfry, symbole
- Zmień hasło regularnie (co 90 dni)
- Użyj menedżera haseł
- Włącz uwierzytelnianie dwuczynnikowe jeśli dostępne
Monitoruj aktywność administracyjną
Dział zatytułowany „Monitoruj aktywność administracyjną”Włącz rejestrowanie logowań administracyjnych:
Panel administracyjny > System > Preferencje > Ustawienia użytkownika
Zaloguj logowania administracyjne: TakZaloguj nieudane próby logowania: TakAlert e-mail przy logowaniu administracyjnym: TakPrzeglądzaj dzienniki regularnie:
# Sprawdź bazę danych pod kątem prób logowaniamysql -u xoops_user -p xoops_db << EOFSELECT uid, uname, DATE_FROM_UNIXTIME(user_lastlogin) as last_loginFROM xoops_users WHERE uid = 1;EOFRegularna konserwacja
Dział zatytułowany „Regularna konserwacja”Zaktualizuj XOOPS i moduły
Dział zatytułowany „Zaktualizuj XOOPS i moduły”Trzymaj XOOPS i wszystkie moduły na bieżąco:
# Sprawdź aktualizacje w panelu administracyjnym# Admin > Moduły > Sprawdź aktualizacje
# Lub przez wiersz poleceńcd /var/www/html/xoops# Pobierz i zainstaluj najnowszą wersję# Postępuj zgodnie z przewodnikiem aktualizacjiAutomatyczne skanowanie bezpieczeństwa
Dział zatytułowany „Automatyczne skanowanie bezpieczeństwa”#!/bin/bash# Skrypt audytu bezpieczeństwa
# Sprawdzaj uprawnienia do plikówecho "Sprawdzanie uprawnień do plików..."find /var/www/html/xoops -type f ! -perm 644 ! -name "*.htaccess" | head -10
# Sprawdzaj podejrzane plikiecho "Sprawdzanie podejrzanych plików..."find /var/www/html/xoops -type f -name "*.php" -newer /var/www/html/xoops/install/ 2>/dev/null
# Sprawdzaj bazę danych pod kątem podejrzanej aktywnościecho "Sprawdzanie nieudanych prób logowania..."mysql -u xoops_user -p xoops_db << EOFSELECT count(*) as attempts FROM xoops_audittrail WHERE action LIKE '%login%' AND status = 0;EOFRegularne kopie zapasowe
Dział zatytułowany „Regularne kopie zapasowe”Automatyzuj codzienne kopie zapasowe:
#!/bin/bash# Dziennie skrypt kopii zapasowej
BACKUP_DIR="/backups/xoops"RETENTION=30 # Przechowuj 30 dni
# Kopia zapasowa bazy danychmysqldump -u xoops_user -p xoops_db | gzip > $BACKUP_DIR/db_$(date +%Y%m%d).sql.gz
# Kopia zapasowa plikówtar -czf $BACKUP_DIR/files_$(date +%Y%m%d).tar.gz /var/www/html/xoops --exclude=cache --exclude=templates_c
# Usuń stare kopie zapasowefind $BACKUP_DIR -type f -mtime +$RETENTION -delete
echo "Kopia zapasowa ukończona o $(date)"Zaplanuj za pomocą cron:
# Edytuj crontabcrontab -e
# Dodaj linię (uruchamia codziennie o 2 rano)0 2 * * * /usr/local/bin/xoops-backup.sh >> /var/log/xoops_backup.log 2>&1Szablon listy kontrolnej bezpieczeństwa
Dział zatytułowany „Szablon listy kontrolnej bezpieczeństwa”Użyj tego szablonu do regularnych audytów bezpieczeństwa:
Tygodniowa lista kontrolna bezpieczeństwa========================================
Data: ___________Sprawdzane przez: ___________
System plików:[ ] Uprawnienia poprawne (644/755)[ ] Folder instalacji usunięty[ ] Brak podejrzanych plików[ ] mainfile.php chroniony
Bezpieczeństwo sieci:[ ] HTTPS/SSL działa[ ] Obecne nagłówki bezpieczeństwa[ ] Panel administracyjny ograniczony[ ] Aktywne ograniczenia przesyłania plików[ ] Zalogowane próby logowania
Aplikacja:[ ] Wersja XOOPS aktualna[ ] Wszystkie moduły zaktualizowane[ ] Brak komunikatów o błędach w dziennikach[ ] Baza danych zoptymalizowana[ ] Cache wyczyszczony
Kopie zapasowe:[ ] Baza danych w kopii zapasowej[ ] Pliki w kopii zapasowej[ ] Kopia zapasowa przetestowana[ ] Kopia spoza lokalizacji zweryfikowana
Znalezione problemy:1. ___________2. ___________3. ___________
Podjęte działania:1. ___________2. ___________Zasoby bezpieczeństwa
Dział zatytułowany „Zasoby bezpieczeństwa”- Server Requirements
- Basic Configuration
- Performance Optimization
- OWASP Top 10: https://owasp.org/www-project-top-ten/
Tagi: #bezpieczeństwo #ssl #https #wzmacnianie #najlepsze-praktyki
Powiązane artykuły:
- ../Installation/Installation
- ../../06-Publisher-Module/User-Guide/Basic-Configuration
- System-Settings
- ../Installation/Upgrading-XOOPS