Beveiligingsconfiguratie
XOOPS Beveiligingsconfiguratie
Section titled “XOOPS Beveiligingsconfiguratie”Uitgebreide gids voor het beveiligen van uw XOOPS-installatie tegen veelvoorkomende webkwetsbaarheden.
Beveiligingscontrolelijst
Section titled “Beveiligingscontrolelijst”Implementeer deze beveiligingsmaatregelen voordat u uw site lanceert:
- Bestandsrechten correct ingesteld (644/755)
- Installatiemap verwijderd of beveiligd
- mainfile.php beschermd tegen wijzigingen
- SSL/HTTPS ingeschakeld op alle pagina’s
- Beheermap hernoemd of beveiligd
- Gevoelige bestanden zijn niet via internet toegankelijk
- .htaccess-beperkingen aanwezig
- Regelmatige back-ups geautomatiseerd
- Beveiligingsheaders geconfigureerd
- CSRF-beveiliging ingeschakeld
- SQL injectiebescherming actief
- Modules/uitbreidingen bijgewerkt
Beveiliging van bestandssysteem
Section titled “Beveiliging van bestandssysteem”Bestandsrechten
Section titled “Bestandsrechten”De juiste bestandsrechten zijn van cruciaal belang voor de veiligheid.
Toestemmingsrichtlijnen
Section titled “Toestemmingsrichtlijnen”| Pad | Machtigingen | Eigenaar | Reden |
|---|---|---|---|
| mainfile.php | 644 | wortel | Bevat DB-referenties |
| *.PHP-bestanden | 644 | wortel | Ongeautoriseerde wijziging voorkomen |
| Telefoonboeken | 755 | wortel | Lezen toestaan, schrijven voorkomen |
| cache/ | 777 | www-gegevens | Webserver moet schrijven |
| sjablonen_c/ | 777 | www-gegevens | Samengestelde sjablonen |
| uploadt/ | 777 | www-gegevens | Gebruikersuploads |
| var/ | 777 | www-gegevens | Variabele gegevens |
| installeren/ | Verwijder | - | Verwijderen na installatie |
| configuraties/ | 755 | wortel | Leesbaar, niet beschrijfbaar |
Machtigingsscript instellen
Section titled “Machtigingsscript instellen”#!/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!"Voer het script uit:
chmod +x /usr/local/bin/xoops-secure.sh/usr/local/bin/xoops-secure.shInstallatiemap verwijderen
Section titled “Installatiemap verwijderen”CRITICAL: De installatiemap moet na de installatie worden verwijderd!
# 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 installBescherm gevoelige mappen
Section titled “Bescherm gevoelige mappen”Maak .htaccess-bestanden om webtoegang tot gevoelige mappen te blokkeren:
Bestand: /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>Bestand: /var/www/html/xoops/templates_c/.htaccess
<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar)$"> Deny from all</FilesMatch>
Options -IndexesBestand: /var/www/html/xoops/cache/.htaccess
Options -Indexes<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7)$"> Deny from all</FilesMatch>Uploadmap beveiligen
Section titled “Uploadmap beveiligen”Voorkom uitvoering van scripts in uploads:
Bestand: /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-configuratie
Section titled “SSL/HTTPS-configuratie”Versleutel al het verkeer tussen gebruikers en uw server.
SSL-certificaat verkrijgen
Section titled “SSL-certificaat verkrijgen”Optie 1: Gratis certificaat van 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/Optie 2: Commercieel SSL-certificaat
Neem contact op met de SSL-provider of registrar:
- Koop het SSL-certificaat
- Controleer het eigendom van het domein
- Installeer certificaatbestanden op de server
- Configureer webserver
Apache SSL-configuratie
Section titled “Apache SSL-configuratie”Creëer een virtuele host HTTPS:
Bestand: /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>Schakel de configuratie in:
# 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-configuratie
Section titled “Nginx SSL-configuratie”Bestand: /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;}Schakel de configuratie in:
ln -s /etc/nginx/sites-available/xoops /etc/nginx/sites-enabled/nginx -tsystemctl restart nginxControleer de HTTPS-installatie
Section titled “Controleer de HTTPS-installatie”# 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/Automatische verlenging Let’s Encrypt-certificaat
Section titled “Automatische verlenging Let’s Encrypt-certificaat”# Enable auto-renewalsystemctl enable certbot.timersystemctl start certbot.timer
# Test renewal processcertbot renew --dry-run
# Manual renewal if neededcertbot renew --force-renewalBeveiliging van webapplicaties
Section titled “Beveiliging van webapplicaties”Bescherm tegen SQL-injectie
Section titled “Bescherm tegen SQL-injectie”XOOPS gebruikt geparametriseerde queries (standaard veilig), maar altijd:
// 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']));Cross-Site Scripting (XSS) Preventie
Section titled “Cross-Site Scripting (XSS) Preventie”Reinig gebruikersinvoer altijd:
// 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']);Preventie van vervalsing van verzoeken op meerdere locaties (CSRF)
Section titled “Preventie van vervalsing van verzoeken op meerdere locaties (CSRF)”XOOPS omvat CSRF-tokenbescherming. Voeg altijd tokens toe:
<!-- In forms --><form method="post"> {xoops_token form=update} <input type="text" name="field"> <input type="submit"></form>Schakel de uitvoering van PHP in de uploadmap uit
Section titled “Schakel de uitvoering van PHP in de uploadmap uit”Voorkom dat aanvallers PHP uploaden en uitvoeren:
# 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-onlyBeveiligingsheaders
Section titled “Beveiligingsheaders”Configureer belangrijke HTTP-beveiligingsheaders:
# 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'"Beveiliging van het beheerderspaneel
Section titled “Beveiliging van het beheerderspaneel”Hernoem de beheerdersmap
Section titled “Hernoem de beheerdersmap”Bescherm de beheerdersmap door deze te hernoemen:
# 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/Configureer XOOPS om de hernoemde map te gebruiken:
Bewerk mainfile.php:
// Change this linedefine('XOOPS_ADMIN_PATH', '/var/www/html/xoops/myadmin123');IP-whitelisting voor beheerder
Section titled “IP-whitelisting voor beheerder”Beperk beheerderstoegang tot specifieke IP’s:
Bestand: /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>Of met Apache 2.2:
Order Deny,AllowDeny from allAllow from 192.168.1.100 203.0.113.50Sterke beheerdersreferenties
Section titled “Sterke beheerdersreferenties”Sterke wachtwoorden afdwingen voor beheerders:1. Gebruik minimaal 16 tekens 2. Meng hoofdletters, kleine letters, cijfers en symbolen 3. Wijzig het wachtwoord regelmatig (elke 90 dagen) 4. Gebruik een wachtwoordbeheerder 5. Schakel tweefactorauthenticatie in, indien beschikbaar
Beheerdersactiviteit monitoren
Section titled “Beheerdersactiviteit monitoren”Logboekregistratie voor beheerdersaanmelding inschakelen:
Beheerderspaneel > Systeem > Voorkeuren > Gebruikersinstellingen
Log Admin Logins: YesLog Failed Login Attempts: YesAlert Email on Admin Login: YesControleer logboeken regelmatig:
# 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;EOFRegelmatig onderhoud
Section titled “Regelmatig onderhoud”Update XOOPS en modules
Section titled “Update XOOPS en modules”Houd XOOPS en alle modules up-to-date:
# 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 guideGeautomatiseerd beveiligingsscannen
Section titled “Geautomatiseerd beveiligingsscannen”#!/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;EOFRegelmatige back-ups
Section titled “Regelmatige back-ups”Automatiseer dagelijkse back-ups:
#!/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)"Schema met cron:
# Edit crontabcrontab -e
# Add line (runs daily at 2 AM)0 2 * * * /usr/local/bin/xoops-backup.sh >> /var/log/xoops_backup.log 2>&1Sjabloon voor beveiligingschecklist
Section titled “Sjabloon voor beveiligingschecklist”Gebruik dit sjabloon voor regelmatige beveiligingsaudits:
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. ___________Beveiligingsbronnen
Section titled “Beveiligingsbronnen”- Serververeisten
- Basisconfiguratie
- Prestatieoptimalisatie
- OWASP Top 10: https://owasp.org/www-project-top-ten/
Tags: #security #ssl #https #hardening #best-practices
Gerelateerde artikelen:
- ../Installatie/Installatie
- ../../06-Publisher-Module/Gebruikershandleiding/Basisconfiguratie
- Systeeminstellingen
- ../Installatie/Upgraden-XOOPS