Configurazione Sicurezza
Configurazione Sicurezza XOOPS
Sezione intitolata “Configurazione Sicurezza XOOPS”Guida completa al rafforzamento della tua installazione XOOPS contro le vulnerabilità web comuni.
Checklist Sicurezza
Sezione intitolata “Checklist Sicurezza”Prima di lanciare il tuo sito, implementa queste misure di sicurezza:
- Permessi file impostati correttamente (644/755)
- Cartella install rimossa o protetta
- mainfile.php protetto da modifiche
- SSL/HTTPS abilitato su tutte le pagine
- Cartella admin rinominata o protetta
- File sensibili non accessibili dal web
- Restrizioni .htaccess in place
- Backup automatizzati
- Header di sicurezza configurati
- Protezione CSRF abilitata
- Protezioni SQL injection attive
- Moduli/estensioni aggiornati
Sicurezza File System
Sezione intitolata “Sicurezza File System”Permessi File
Sezione intitolata “Permessi File”I permessi file corretti sono critici per la sicurezza.
Linee Guida Permessi
Sezione intitolata “Linee Guida Permessi”| Percorso | Permessi | Proprietario | Motivo |
|---|---|---|---|
| mainfile.php | 644 | root | Contiene credenziali DB |
| File *.php | 644 | root | Previeni modifiche non autorizzate |
| Directory | 755 | root | Consenti lettura, previeni scrittura |
| cache/ | 777 | www-data | Web server deve scrivere |
| templates_c/ | 777 | www-data | Template compilati |
| uploads/ | 777 | www-data | Caricamenti utente |
| var/ | 777 | www-data | Dati variabili |
| install/ | Rimuovi | - | Cancella dopo installazione |
| configs/ | 755 | root | Leggibile, non scrivibile |
Script Impostazione Permessi
Sezione intitolata “Script Impostazione Permessi”#!/bin/bashXOOPS_PATH="/var/www/html/xoops"WEB_USER="www-data"
# Imposta proprietàecho "Impostazione proprietà..."chown -R $WEB_USER:$WEB_USER $XOOPS_PATH
# Imposta permessi restrittivi di defaultecho "Impostazione permessi base..."find $XOOPS_PATH -type d -exec chmod 755 {} \;find $XOOPS_PATH -type f -exec chmod 644 {} \;
# Rendi directory specifiche scrivibiliecho "Impostazione directory scrivibili..."chmod 777 $XOOPS_PATH/cachechmod 777 $XOOPS_PATH/templates_cchmod 777 $XOOPS_PATH/uploadschmod 777 $XOOPS_PATH/var
# Proteggi file sensibiliecho "Protezione file sensibili..."chmod 644 $XOOPS_PATH/mainfile.phpchmod 444 $XOOPS_PATH/mainfile.php.dist # Se esiste (sola lettura)
# Verifica permessiecho "Verifica permessi..."ls -la $XOOPS_PATH | grep -E "mainfile|cache|uploads|var|templates_c"
echo "Rafforzamento sicurezza completato!"Esegui lo script:
chmod +x /usr/local/bin/xoops-secure.sh/usr/local/bin/xoops-secure.shRimuovi Cartella Installazione
Sezione intitolata “Rimuovi Cartella Installazione”CRITICO: La cartella install deve essere rimossa dopo l’installazione!
# Opzione 1: Cancella completamenterm -rf /var/www/html/xoops/install/
# Opzione 2: Rinomina e mantieni come riferimentomv /var/www/html/xoops/install/ /var/www/html/xoops/install.bak/
# Verifica rimozionels -la /var/www/html/xoops/ | grep installProteggi Directory Sensibili
Sezione intitolata “Proteggi Directory Sensibili”Crea file .htaccess per bloccare accesso web a cartelle sensibili:
File: /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>File: /var/www/html/xoops/templates_c/.htaccess
<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar)$"> Deny from all</FilesMatch>
Options -IndexesFile: /var/www/html/xoops/cache/.htaccess
Options -Indexes<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7)$"> Deny from all</FilesMatch>Proteggi Directory Upload
Sezione intitolata “Proteggi Directory Upload”Previeni esecuzione di script in upload:
File: /var/www/html/xoops/uploads/.htaccess
# Previeni esecuzione script<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar|pl|py|jsp|asp|aspx|cgi|sh|bat|exe)$"> Deny from all</FilesMatch>
# Previeni elencazione directoryOptions -Indexes
# Protezione aggiuntiva<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /xoops/uploads/
# Blocca file sospetti RewriteCond %{REQUEST_URI} \.(php|phtml|php3|php4|php5|php6|php7)$ [NC] RewriteRule ^.*$ - [F,L]</IfModule>Configurazione SSL/HTTPS
Sezione intitolata “Configurazione SSL/HTTPS”Cripta tutto il traffico tra utenti e il tuo server.
Ottieni Certificato SSL
Sezione intitolata “Ottieni Certificato SSL”Opzione 1: Certificato Gratuito da Let’s Encrypt
# Installa Certbotapt-get install certbot python3-certbot-apache
# Ottieni certificato (configura automaticamente Apache)certbot certonly --apache -d your-domain.com -d www.your-domain.com
# Verifica certificato installatols /etc/letsencrypt/live/your-domain.com/Opzione 2: Certificato SSL Commerciale
Contatta provider SSL o registrar:
- Acquista certificato SSL
- Verifica proprietà dominio
- Installa file certificato su server
- Configura web server
Configurazione SSL Apache
Sezione intitolata “Configurazione SSL Apache”Crea virtual host HTTPS:
File: /etc/apache2/sites-available/xoops-ssl.conf
<VirtualHost *:443> ServerName your-domain.com ServerAlias www.your-domain.com DocumentRoot /var/www/html/xoops
# Configurazione 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
# Header di Sicurezza 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>
# Ristringe cartella install <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>
# Reindirizza HTTP a HTTPS<VirtualHost *:80> ServerName your-domain.com ServerAlias www.your-domain.com Redirect 301 / https://your-domain.com/</VirtualHost>Abilita configurazione:
# Abilita modulo SSLa2enmod ssl
# Abilita sitoa2ensite xoops-ssl
# Disabilita sito non-SSL se esistea2dissite 000-default
# Prova configurazioneapache2ctl configtest# Deve mostrare: Syntax OK
# Riavvia Apachesystemctl restart apache2Configurazione SSL Nginx
Sezione intitolata “Configurazione SSL Nginx”File: /etc/nginx/sites-available/xoops
# Reindirizza HTTP a HTTPSserver { listen 80; listen [::]:80; server_name your-domain.com www.your-domain.com;
location / { return 301 https://$server_name$request_uri; }}
# Server 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;
# Configurazione Certificato SSL ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# Configurazione SSL Moderna 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;
# Header HSTS add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# Header di Sicurezza 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;
# Ristringe cartella install location ~ ^/(install|upgrade)/ { deny all; }
# Nega accesso a file sensibili 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; }
# Caching file statici location ~* \.(js|css|png|jpg|gif|ico|svg)$ { expires 30d; add_header Cache-Control "public, immutable"; }
# Riscrittura URL 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;}Abilita configurazione:
ln -s /etc/nginx/sites-available/xoops /etc/nginx/sites-enabled/nginx -tsystemctl restart nginxVerifica Installazione HTTPS
Sezione intitolata “Verifica Installazione HTTPS”# Prova configurazione SSLopenssl s_client -connect your-domain.com:443 -tls1_2
# Controlla validità certificatoopenssl 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/Rinnovamento Automatico Certificato Let’s Encrypt
Sezione intitolata “Rinnovamento Automatico Certificato Let’s Encrypt”# Abilita rinnovamento automaticosystemctl enable certbot.timersystemctl start certbot.timer
# Prova processo rinnovamentocertbot renew --dry-run
# Rinnovamento manuale se necessariocertbot renew --force-renewalSicurezza Applicazione Web
Sezione intitolata “Sicurezza Applicazione Web”Proteggi Contro SQL Injection
Sezione intitolata “Proteggi Contro SQL Injection”XOOPS usa query parametrizzate (sicure per default), ma sempre:
// NON SICURO - Non farlo mai!$query = "SELECT * FROM users WHERE name = '" . $_GET['name'] . "'";
// SICURO - Usa prepared statement$database = XoopsDatabaseFactory::getDatabaseConnection();$sql = "SELECT * FROM " . $database->prefix('users') . " WHERE name = ?";$result = $database->query($sql, array($_GET['name']));Prevenzione Cross-Site Scripting (XSS)
Sezione intitolata “Prevenzione Cross-Site Scripting (XSS)”Sempre sanifica l’input dell’utente:
// NON SICUROecho $_GET['user_input'];
// SICURO - Usa funzioni di sanificazione XOOPSecho htmlspecialchars($_GET['user_input'], ENT_QUOTES, 'UTF-8');
// Oppure usa funzioni XOOPS$text_sanitizer = new xoops_text_sanitizer();echo $text_sanitizer->stripSlashesGPC($_GET['user_input']);Prevenzione Cross-Site Request Forgery (CSRF)
Sezione intitolata “Prevenzione Cross-Site Request Forgery (CSRF)”XOOPS include protezione token CSRF. Sempre includi token:
<!-- Nei form --><form method="post"> {xoops_token form=update} <input type="text" name="field"> <input type="submit"></form>Disabilita Esecuzione PHP nella Cartella Upload
Sezione intitolata “Disabilita Esecuzione PHP nella Cartella Upload”Previeni attaccanti da caricare ed eseguire PHP:
# Crea .htaccess nella cartella uploadscat > /var/www/html/xoops/uploads/.htaccess << 'EOF'<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7)$"> Deny from all</FilesMatch>php_flag engine offEOF
# Alternativa: Disabilita esecuzione globalmente in uploadschmod 444 /var/www/html/xoops/uploads/ # Sola letturaHeader di Sicurezza
Sezione intitolata “Header di Sicurezza”Configura importanti header di sicurezza HTTP:
# Strict-Transport-Security (HSTS)# Forza HTTPS per 1 annoHeader always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# X-Content-Type-Options# Previene MIME type sniffingHeader always set X-Content-Type-Options "nosniff"
# X-Frame-Options# Previene attacchi clickjackingHeader always set X-Frame-Options "SAMEORIGIN"
# X-XSS-Protection# Protezione XSS browserHeader always set X-XSS-Protection "1; mode=block"
# Referrer-Policy# Controlla informazioni referrerHeader always set Referrer-Policy "strict-origin-when-cross-origin"
# Content-Security-Policy# Controlla caricamento risorsaHeader 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'"Sicurezza Pannello Admin
Sezione intitolata “Sicurezza Pannello Admin”Rinomina Cartella Admin
Sezione intitolata “Rinomina Cartella Admin”Proteggi cartella admin rinominandola:
# Rinomina cartella adminmv /var/www/html/xoops/admin /var/www/html/xoops/myadmin123
# Aggiorna URL accesso admin# Vecchio: http://your-domain.com/xoops/admin/# Nuovo: http://your-domain.com/xoops/myadmin123/Configura XOOPS per usare cartella rinominata:
Modifica mainfile.php:
// Cambia questa rigadefine('XOOPS_ADMIN_PATH', '/var/www/html/xoops/myadmin123');IP Whitelisting per Admin
Sezione intitolata “IP Whitelisting per Admin”Ristringe accesso admin a IP specifici:
File: /var/www/html/xoops/myadmin123/.htaccess
# Consenti solo IP specifici<RequireAll> Require ip 192.168.1.100 # IP ufficio Require ip 203.0.113.50 # IP casa Deny from all</RequireAll>Oppure con Apache 2.2:
Order Deny,AllowDeny from allAllow from 192.168.1.100 203.0.113.50Credenziali Admin Forti
Sezione intitolata “Credenziali Admin Forti”Applica password forti per amministratori:
- Usa almeno 16 caratteri
- Mescola maiuscole, minuscole, numeri, simboli
- Cambia password regolarmente (ogni 90 giorni)
- Usa password manager
- Abilita autenticazione a due fattori se disponibile
Monitora Attività Admin
Sezione intitolata “Monitora Attività Admin”Abilita log accesso admin:
Pannello Admin > Sistema > Preferenze > Impostazioni Utente
Log Accessi Admin: YesLog Tentativi Login Falliti: YesAllerta Email su Accesso Admin: YesRivedi log regolarmente:
# Controlla database per tentativi loginmysql -u xoops_user -p xoops_db << EOFSELECT uid, uname, DATE_FROM_UNIXTIME(user_lastlogin) as last_loginFROM xoops_users WHERE uid = 1;EOFManutenzione Regolare
Sezione intitolata “Manutenzione Regolare”Aggiorna XOOPS e Moduli
Sezione intitolata “Aggiorna XOOPS e Moduli”Mantieni XOOPS e tutti i moduli aggiornati:
# Controlla aggiornamenti nel pannello admin# Admin > Moduli > Controlla Aggiornamenti
# Oppure via riga di comandocd /var/www/html/xoops# Scarica e installa versione più recente# Segui guida upgradeScansione Sicurezza Automatizzata
Sezione intitolata “Scansione Sicurezza Automatizzata”#!/bin/bash# Script audit di sicurezza
# Controlla permessi fileecho "Controllo permessi file..."find /var/www/html/xoops -type f ! -perm 644 ! -name "*.htaccess" | head -10
# Controlla file sospettiecho "Controllo file sospetti..."find /var/www/html/xoops -type f -name "*.php" -newer /var/www/html/xoops/install/ 2>/dev/null
# Controlla database per attività sospettaecho "Controllo tentativi login falliti..."mysql -u xoops_user -p xoops_db << EOFSELECT count(*) as attempts FROM xoops_audittrail WHERE action LIKE '%login%' AND status = 0;EOFBackup Regolari
Sezione intitolata “Backup Regolari”Automatizza backup giornalieri:
#!/bin/bash# Script backup giornaliero
BACKUP_DIR="/backups/xoops"RETENTION=30 # Mantieni 30 giorni
# Backup databasemysqldump -u xoops_user -p xoops_db | gzip > $BACKUP_DIR/db_$(date +%Y%m%d).sql.gz
# Backup filetar -czf $BACKUP_DIR/files_$(date +%Y%m%d).tar.gz /var/www/html/xoops --exclude=cache --exclude=templates_c
# Rimuovi backup vecchifind $BACKUP_DIR -type f -mtime +$RETENTION -delete
echo "Backup completato a $(date)"Pianifica con cron:
# Modifica crontabcrontab -e
# Aggiungi riga (esegui quotidianamente alle 2 AM)0 2 * * * /usr/local/bin/xoops-backup.sh >> /var/log/xoops_backup.log 2>&1Modello Checklist Sicurezza
Sezione intitolata “Modello Checklist Sicurezza”Usa questo modello per audit di sicurezza regolari:
Checklist Sicurezza Settimanale========================
Data: ___________Controllato da: ___________
File System:[ ] Permessi corretti (644/755)[ ] Cartella install rimossa[ ] Nessun file sospetto[ ] mainfile.php protetto
Sicurezza Web:[ ] HTTPS/SSL funzionante[ ] Header di sicurezza presenti[ ] Pannello admin ristretto[ ] Restrizioni caricamento file attive[ ] Tentativi login registrati
Applicazione:[ ] Versione XOOPS attuale[ ] Tutti i moduli aggiornati[ ] Nessun messaggio di errore nei log[ ] Database ottimizzato[ ] Cache cancellata
Backup:[ ] Database sottoposto a backup[ ] File sottoposti a backup[ ] Backup testato[ ] Copia offsite verificata
Problemi Trovati:1. ___________2. ___________3. ___________
Azioni Intraprese:1. ___________2. ___________Risorse Sicurezza
Sezione intitolata “Risorse Sicurezza”- Requisiti Server
- Configurazione di Base
- Ottimizzazione Prestazioni
- OWASP Top 10: https://owasp.org/www-project-top-ten/
Tag: #sicurezza #ssl #https #rafforzamento #best-practice
Articoli Correlati:
- ../Installation/Installation
- ../../06-Publisher-Module/User-Guide/Basic-Configuration
- System-Settings
- ../Installation/Upgrading-XOOPS