Varnostna konfiguracija
XOOPS Varnostna konfiguracija
Section titled “XOOPS Varnostna konfiguracija”Obsežen vodnik za zaščito vaše namestitve XOOPS pred pogostimi spletnimi ranljivostmi.
Varnostni kontrolni seznam
Section titled “Varnostni kontrolni seznam”Preden zaženete svoje spletno mesto, uvedite te varnostne ukrepe:
- Pravilno nastavljena dovoljenja za datoteke (644/755)
- Namestitvena mapa je odstranjena ali zaščitena
- glavna datoteka.php protected from modification
- SSL/HTTPS omogočeno na vseh straneh
- Skrbniška mapa je preimenovana ali zaščitena
- Občutljive datoteke niso dostopne prek spleta
- Omejitve [ ] .htaccess veljajo
- Avtomatizirano redno varnostno kopiranje
- Varnostne glave konfigurirane
- CSRF zaščita omogočena
- SQL zaščite pred vbrizgavanjem aktivne
- Modules/extensions posodobljeno
Varnost datotečnega sistema
Section titled “Varnost datotečnega sistema”Dovoljenja za datoteke
Section titled “Dovoljenja za datoteke”Ustrezna dovoljenja za datoteke so ključnega pomena za varnost.
Smernice za dovoljenja
Section titled “Smernice za dovoljenja”| Pot | Dovoljenja | Lastnik | Razlog |
|---|---|---|---|
| glavna datoteka.php | 644 | root | Contains DB credentials |
| *.php files | 644 | root | Prevent unauthorized modification |
| Imeniki | 755 | koren | Dovoli branje, prepreči pisanje |
| predpomnilnik/ | 777 | www-podatki | Spletni strežnik mora pisati |
| predloge_c/ | 777 | www-podatki | Prevedene predloge |
| nalaganja/ | 777 | www-podatki | Uporabniški prenosi |
| var/ | 777 | www-podatki | Spremenljivi podatki |
| namestiti/ | Odstrani | - | Izbriši po namestitvi |
| konfiguracije/ | 755 | koren | Berljivo, ne zapisljivo |
#!/bin/bashXOOPS_PATH="/var/www/html/xoops"WEB_USER="www-data"
# Set ownershipecho "Setting ownership..."chown -R $WEB_USER:$WEB_USER $XOOPS_PATH
# Set restrictive default permissionsecho "Setting base permissions..."find $XOOPS_PATH -type d -exec chmod 755 {} \;find $XOOPS_PATH -type f -exec chmod 644 {} \;
# Make specific directories writableecho "Setting writable directories..."chmod 777 $XOOPS_PATH/cachechmod 777 $XOOPS_PATH/templates_cchmod 777 $XOOPS_PATH/uploadschmod 777 $XOOPS_PATH/var
# Protect sensitive filesecho "Protecting sensitive files..."chmod 644 $XOOPS_PATH/mainfile.phpchmod 444 $XOOPS_PATH/mainfile.php.dist # If it exists (read-only)
# Verify permissionsecho "Verifying permissions..."ls -la $XOOPS_PATH | grep -E "mainfile|cache|uploads|var|templates_c"
echo "Security hardening completed!"Zaženite skript:
chmod +x /usr/local/bin/xoops-secure.sh/usr/local/bin/xoops-secure.shOdstrani namestitveno mapo
Section titled “Odstrani namestitveno mapo”CRITICAL: Namestitveno mapo morate po namestitvi odstraniti!
# Option 1: Delete completelyrm -rf /var/www/html/xoops/install/
# Option 2: Rename and keep for referencemv /var/www/html/xoops/install/ /var/www/html/xoops/install.bak/
# Verify removalls -la /var/www/html/xoops/ | grep installZaščitite občutljive imenike
Section titled “Zaščitite občutljive imenike”Ustvarite datoteke .htaccess za blokiranje spletnega dostopa do občutljivih map:
Datoteka: /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>Datoteka: /var/www/html/XOOPS/templates_c/.htaccess
<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar)$"> Deny from all</FilesMatch>
Options -IndexesDatoteka: /var/www/html/XOOPS/cache/.htaccess
Options -Indexes<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7)$"> Deny from all</FilesMatch>Zaščitite imenik za nalaganje
Section titled “Zaščitite imenik za nalaganje”Prepreči izvajanje skriptov pri nalaganjih:
Datoteka: /var/www/html/XOOPS/uploads/.htaccess
# Prevent script execution<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar|pl|py|jsp|asp|aspx|cgi|sh|bat|exe)$"> Deny from all</FilesMatch>
# Prevent directory listingOptions -Indexes
# Additional protection<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /xoops/uploads/
# Block suspicious files RewriteCond %{REQUEST_URI} \.(php|phtml|php3|php4|php5|php6|php7)$ [NC] RewriteRule ^.*$ - [F,L]</IfModule>SSL/HTTPS Konfiguracija
Section titled “SSL/HTTPS Konfiguracija”Šifrirajte ves promet med uporabniki in vašim strežnikom.
Pridobite SSL certifikat
Section titled “Pridobite SSL certifikat”1. možnost: brezplačno potrdilo podjetja Let’s Encrypt
# Install Certbotapt-get install certbot python3-certbot-apache
# Obtain certificate (auto-configures Apache)certbot certonly --apache -d your-domain.com -d www.your-domain.com
# Verify certificate installedls /etc/letsencrypt/live/your-domain.com/2. možnost: komercialno potrdilo SSL
Kontaktirajte SSL ponudnika ali registrarja:
- Nakup potrdila SSL
- Preverite lastništvo domene
- Namestite datoteke potrdila na strežnik
- Konfigurirajte spletni strežnik
Apache SSL Konfiguracija
Section titled “Apache SSL Konfiguracija”Ustvarite HTTPS virtualnega gostitelja:
Datoteka: /etc/apache2/sites-available/XOOPS-ssl.conf
<VirtualHost *:443> ServerName your-domain.com ServerAlias www.your-domain.com DocumentRoot /var/www/html/xoops
# SSL Configuration 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
# Security Headers 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>
# Restrict install folder <Directory /var/www/html/xoops/install> Deny from all </Directory>
# Logging ErrorLog ${APACHE_LOG_DIR}/xoops_ssl_error.log CustomLog ${APACHE_LOG_DIR}/xoops_ssl_access.log combined</VirtualHost>
# Redirect HTTP to HTTPS<VirtualHost *:80> ServerName your-domain.com ServerAlias www.your-domain.com Redirect 301 / https://your-domain.com/</VirtualHost>Omogoči konfiguracijo:
# Enable SSL modulea2enmod ssl
# Enable sitea2ensite xoops-ssl
# Disable non-SSL site if existsa2dissite 000-default
# Test configurationapache2ctl configtest# Should output: Syntax OK
# Restart Apachesystemctl restart apache2Nginx SSL Konfiguracija
Section titled “Nginx SSL Konfiguracija”Datoteka: /etc/nginx/sites-available/XOOPS
# HTTP to HTTPS redirectserver { listen 80; listen [::]:80; server_name your-domain.com www.your-domain.com;
location / { return 301 https://$server_name$request_uri; }}
# HTTPS serverserver { 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;
# SSL Certificate Configuration ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# Modern SSL Configuration 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;
# HSTS Header add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# Security Headers 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;
# Restrict install folder location ~ ^/(install|upgrade)/ { deny all; }
# Deny access to sensitive files location ~ /\. { deny all; }
# PHP-FPM backend 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; }
# Static files caching location ~* \.(js|css|png|jpg|gif|ico|svg)$ { expires 30d; add_header Cache-Control "public, immutable"; }
# URL rewriting location / { try_files $uri $uri/ /index.php?$query_string; }
# Logging access_log /var/log/nginx/xoops_access.log; error_log /var/log/nginx/xoops_error.log;}Omogoči konfiguracijo:
ln -s /etc/nginx/sites-available/xoops /etc/nginx/sites-enabled/nginx -tsystemctl restart nginxPreverite namestitev HTTPS
Section titled “Preverite namestitev HTTPS”# Test SSL configurationopenssl s_client -connect your-domain.com:443 -tls1_2
# Check certificate validityopenssl x509 -in /etc/letsencrypt/live/your-domain.com/cert.pem -noout -text
# SSL/TLS test online# https://www.ssllabs.com/ssltest/# https://www.testssl.sh/Samodejna obnovitev potrdila Let’s Encrypt
Section titled “Samodejna obnovitev potrdila Let’s Encrypt”# Enable auto-renewalsystemctl enable certbot.timersystemctl start certbot.timer
# Test renewal processcertbot renew --dry-run
# Manual renewal if neededcertbot renew --force-renewalVarnost spletnih aplikacij
Section titled “Varnost spletnih aplikacij”Zaščita pred SQL injekcijo
Section titled “Zaščita pred SQL injekcijo”XOOPS uporablja parametrizirane poizvedbe (privzeto varne), vendar vedno:
// UNSAFE - Never do this!$query = "SELECT * FROM users WHERE name = '" . $_GET['name'] . "'";
// SAFE - Use prepared statements$database = XoopsDatabaseFactory::getDatabaseConnection();$sql = "SELECT * FROM " . $database->prefix('users') . " WHERE name = ?";$result = $database->query($sql, array($_GET['name']));Skriptno izvajanje med spletnimi mesti (XSS) Preprečevanje
Section titled “Skriptno izvajanje med spletnimi mesti (XSS) Preprečevanje”Vedno razčisti uporabniški vnos:
// UNSAFEecho $_GET['user_input'];
// SAFE - Use XOOPS sanitization functionsecho htmlspecialchars($_GET['user_input'], ENT_QUOTES, 'UTF-8');
// Or use XOOPS functions$text_sanitizer = new xoops_text_sanitizer();echo $text_sanitizer->stripSlashesGPC($_GET['user_input']);Ponarejanje zahtev med spletnimi mesti (CSRF) Preprečevanje
Section titled “Ponarejanje zahtev med spletnimi mesti (CSRF) Preprečevanje”XOOPS vključuje zaščito žetonov CSRF. Vedno vključi žetone:
<!-- In forms --><form method="post"> {xoops_token form=update} <input type="text" name="field"> <input type="submit"></form>Onemogoči PHP izvajanje v mapi za nalaganje
Section titled “Onemogoči PHP izvajanje v mapi za nalaganje”Preprečite napadalcem nalaganje in izvajanje PHP:
# Create .htaccess in uploads foldercat > /var/www/html/xoops/uploads/.htaccess << 'EOF'<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7)$"> Deny from all</FilesMatch>php_flag engine offEOF
# Alternative: Disable execution globally in uploadschmod 444 /var/www/html/xoops/uploads/ # Read-onlyVarnostne glave
Section titled “Varnostne glave”Konfigurirajte pomembne varnostne glave HTTP:
# Strict-Transport-Security (HSTS)# Forces HTTPS for 1 yearHeader always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# X-Content-Type-Options# Prevents MIME type sniffingHeader always set X-Content-Type-Options "nosniff"
# X-Frame-Options# Prevents clickjacking attacksHeader always set X-Frame-Options "SAMEORIGIN"
# X-XSS-Protection# Browser XSS protectionHeader always set X-XSS-Protection "1; mode=block"
# Referrer-Policy# Controls referrer informationHeader always set Referrer-Policy "strict-origin-when-cross-origin"
# Content-Security-Policy# Controls resource loadingHeader 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'"Varnost skrbniške plošče
Section titled “Varnost skrbniške plošče”Preimenuj skrbniško mapo
Section titled “Preimenuj skrbniško mapo”Zaščitite skrbniško mapo tako, da jo preimenujete:
# Rename admin foldermv /var/www/html/xoops/admin /var/www/html/xoops/myadmin123
# Update admin access URL# Old: http://your-domain.com/xoops/admin/# New: http://your-domain.com/xoops/myadmin123/Konfigurirajte XOOPS za uporabo preimenovane mape:
Uredite mainfile.php:
// Change this linedefine('XOOPS_ADMIN_PATH', '/var/www/html/xoops/myadmin123');Seznam dovoljenih naslovov IP za skrbnika
Section titled “Seznam dovoljenih naslovov IP za skrbnika”Omejite skrbniški dostop na določene IP-je:
Datoteka: /var/www/html/XOOPS/myadmin123/.htaccess
# Allow only specific IPs<RequireAll> Require ip 192.168.1.100 # Your office IP Require ip 203.0.113.50 # Your home IP Deny from all</RequireAll>Ali z Apache 2.2:
Order Deny,AllowDeny from allAllow from 192.168.1.100 203.0.113.50Močne skrbniške poverilnice
Section titled “Močne skrbniške poverilnice”Uveljavi močna gesla za skrbnike:
- Uporabite vsaj 16 znakov
- Mešajte velike in male črke, številke, simbole
- Redno menjajte geslo (vsakih 90 dni)
- Uporabite upravitelja gesel
- Omogočite dvostopenjsko avtentikacijo, če je na voljo
Spremljajte dejavnost skrbnika
Section titled “Spremljajte dejavnost skrbnika”Omogoči beleženje skrbniške prijave:
Skrbniška plošča > Sistem > Nastavitve > Uporabniške nastavitve
Log Admin Logins: YesLog Failed Login Attempts: YesAlert Email on Admin Login: YesRedno pregledujte dnevnike:
# Check database for login attemptsmysql -u xoops_user -p xoops_db << EOFSELECT uid, uname, DATE_FROM_UNIXTIME(user_lastlogin) as last_loginFROM xoops_users WHERE uid = 1;EOFRedno vzdrževanje
Section titled “Redno vzdrževanje”Posodobite XOOPS in module
Section titled “Posodobite XOOPS in module”Posodabljajte XOOPS in vse module:
# Check for updates in admin panel# Admin > Modules > Check for Updates
# Or via command linecd /var/www/html/xoops# Download and install latest version# Follow upgrade guideSamodejno varnostno skeniranje
Section titled “Samodejno varnostno skeniranje”#!/bin/bash# Security audit script
# Check file permissionsecho "Checking file permissions..."find /var/www/html/xoops -type f ! -perm 644 ! -name "*.htaccess" | head -10
# Check for suspicious filesecho "Checking for suspicious files..."find /var/www/html/xoops -type f -name "*.php" -newer /var/www/html/xoops/install/ 2>/dev/null
# Check database for suspicious activityecho "Checking for failed login attempts..."mysql -u xoops_user -p xoops_db << EOFSELECT count(*) as attempts FROM xoops_audittrail WHERE action LIKE '%login%' AND status = 0;EOFRedne varnostne kopije
Section titled “Redne varnostne kopije”Avtomatizirajte dnevne varnostne kopije:
#!/bin/bash# Daily backup script
BACKUP_DIR="/backups/xoops"RETENTION=30 # Keep 30 days
# Backup databasemysqldump -u xoops_user -p xoops_db | gzip > $BACKUP_DIR/db_$(date +%Y%m%d).sql.gz
# Backup filestar -czf $BACKUP_DIR/files_$(date +%Y%m%d).tar.gz /var/www/html/xoops --exclude=cache --exclude=templates_c
# Remove old backupsfind $BACKUP_DIR -type f -mtime +$RETENTION -delete
echo "Backup completed at $(date)"Urnik s cronom:
# Edit crontabcrontab -e
# Add line (runs daily at 2 AM)0 2 * * * /usr/local/bin/xoops-backup.sh >> /var/log/xoops_backup.log 2>&1Predloga varnostnega kontrolnega seznama
Section titled “Predloga varnostnega kontrolnega seznama”Uporabite to predlogo za redne varnostne revizije:
Weekly Security Checklist========================
Date: ___________Checked by: ___________
File System:[ ] Permissions correct (644/755)[ ] Install folder removed[ ] No suspicious files[ ] mainfile.php protected
Web Security:[ ] HTTPS/SSL working[ ] Security headers present[ ] Admin panel restricted[ ] File upload restrictions active[ ] Login attempts logged
Application:[ ] XOOPS version current[ ] All modules updated[ ] No error messages in logs[ ] Database optimized[ ] Cache cleared
Backups:[ ] Database backed up[ ] Files backed up[ ] Backup tested[ ] Offsite copy verified
Issues Found:1. ___________2. ___________3. ___________
Actions Taken:1. ___________2. ___________Varnostni viri
Section titled “Varnostni viri”- Zahteve strežnika
- Osnovna konfiguracija
- Optimizacija zmogljivosti
- OWASP Top 10: https://owasp.org/www-project-top-ten/
Oznake: #varnost #ssl #https #utrjevanje #najboljše prakse
Povezani članki:
- ../Installation/Installation
- ../../06-Publisher-Module/User-Guide/Basic-Configuration
- Sistemske nastavitve
- ../Installation/Upgrading-XOOPS