Sigurnosna konfiguracija
XOOPS Sigurnosna konfiguracija
Section titled “XOOPS Sigurnosna konfiguracija”Sveobuhvatni vodič za zaštitu vaše instalacije XOOPS od uobičajenih web ranjivosti.
Sigurnosni kontrolni popis
Section titled “Sigurnosni kontrolni popis”Prije pokretanja svoje web stranice primijenite ove sigurnosne mjere:
- Dopuštenja za datoteke ispravno postavljena (644/755)
- Instalacijska mapa uklonjena ili zaštićena
- mainfile.php zaštićeno od izmjena
- SSL/HTTPS omogućen na svim stranicama
- Administratorska mapa je preimenovana ili zaštićena
- Osjetljive datoteke nisu dostupne putem interneta
- .htaccess ograničenja na snazi
- Automatizirano redovno sigurnosno kopiranje
- Sigurnosna zaglavlja konfigurirana
- CSRF zaštita omogućena
- SQL zaštite od ubrizgavanja aktivne
- Ažurirani moduli/proširenja
Sigurnost datotečnog sustava
Section titled “Sigurnost datotečnog sustava”dozvole za datoteke
Section titled “dozvole za datoteke”Ispravna dopuštenja za datoteke ključna su za sigurnost.
Smjernice za dozvole
Section titled “Smjernice za dozvole”| Put | Dopuštenja | Vlasnik | Razlog |
|---|---|---|---|
| mainfile.php | 644 | korijen | Sadrži DB vjerodajnice |
| *.php files | 644 | root | Prevent unauthorized modification |
| Imenici | 755 | korijen | Dopusti čitanje, spriječi pisanje |
| cache/ | 777 | www-podaci | Web poslužitelj mora pisati |
| templates_c/ | 777 | www-podaci | Sastavljeno templates |
| uploads/ | 777 | www-podaci | Korisnik uploads |
| var/ | 777 | www-podaci | Varijabilni podaci |
| instalirati/ | Ukloni | - | Izbriši nakon instalacije |
| konfiguracije/ | 755 | korijen | Čitljivo, ne može se pisati |
Postavljanje dopuštenja skripte
Section titled “Postavljanje dopuštenja skripte”#!/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!"Pokrenite skriptu:
chmod +x /usr/local/bin/xoops-secure.sh/usr/local/bin/xoops-secure.shUkloni instalacijsku mapu
Section titled “Ukloni instalacijsku mapu”KRITIČNO: Instalacijska mapa se mora ukloniti nakon instalacije!
# 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štitite osjetljive direktorije
Section titled “Zaštitite osjetljive direktorije”Napravite .htaccess datoteke za blokiranje web pristupa osjetljivim mapama:
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štitite imenik za učitavanje
Section titled “Zaštitite imenik za učitavanje”Spriječi izvršavanje skripti u uploads:
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 sav promet između korisnika i vašeg poslužitelja.
Nabavite SSL certifikat
Section titled “Nabavite SSL certifikat”Opcija 1: besplatni certifikat tvrtke 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/Opcija 2: Komercijalni SSL certifikat
Obratite se SSL pružatelju ili registru:
- Kupite SSL certifikat
- Potvrdite vlasništvo nad domenom
- Instalirajte datoteke certifikata na poslužitelj
- Konfigurirajte web poslužitelj
Apache SSL konfiguracija
Section titled “Apache SSL konfiguracija”Stvorite HTTPS virtualni host:
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>Omogućite konfiguraciju:
# 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;}Omogućite konfiguraciju:
ln -s /etc/nginx/sites-available/xoops /etc/nginx/sites-enabled/nginx -tsystemctl restart nginxProvjerite HTTPS instalaciju
Section titled “Provjerite HTTPS instalaciju”# 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/Automatsko obnavljanje Let’s Encrypt certifikata
Section titled “Automatsko obnavljanje Let’s Encrypt certifikata”# Enable auto-renewalsystemctl enable certbot.timersystemctl start certbot.timer
# Test renewal processcertbot renew --dry-run
# Manual renewal if neededcertbot renew --force-renewalSigurnost web aplikacije
Section titled “Sigurnost web aplikacije”Zaštita od ubrizgavanja SQL
Section titled “Zaštita od ubrizgavanja SQL”XOOPS koristi parametrizirane upite (sigurno prema zadanim postavkama), ali uvijek:
// 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']));Prevencija Cross-Site Scripting (XSS).
Section titled “Prevencija Cross-Site Scripting (XSS).”Uvijek očisti korisnički unos:
// 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']);Prevencija krivotvorenja zahtjeva između stranica (CSRF)
Section titled “Prevencija krivotvorenja zahtjeva između stranica (CSRF)”XOOPS includes CSRF zaštita tokena. Uvijek include tokeni:
<!-- In forms --><form method="post"> {xoops_token form=update} <input type="text" name="field"> <input type="submit"></form>Onemogući izvršenje PHP u mapi za prijenos
Section titled “Onemogući izvršenje PHP u mapi za prijenos”Spriječite napadače da učitaju i izvrše 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-onlySigurnosna zaglavlja
Section titled “Sigurnosna zaglavlja”Konfigurirajte važna HTTP sigurnosna zaglavlja:
# 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'"Sigurnost administratorske ploče
Section titled “Sigurnost administratorske ploče”Preimenuj administratorsku mapu
Section titled “Preimenuj administratorsku mapu”Zaštitite mapu admin preimenovanjem:
# 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 korištenje preimenovane mape:
Uredi mainfile.php:
// Change this linedefine('XOOPS_ADMIN_PATH', '/var/www/html/xoops/myadmin123');Popis dopuštenih IP adresa za administratora
Section titled “Popis dopuštenih IP adresa za administratora”Ograničite pristup admin na određene IP adrese:
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>Ili s Apacheom 2.2:
Order Deny,AllowDeny from allAllow from 192.168.1.100 203.0.113.50Jake administratorske vjerodajnice
Section titled “Jake administratorske vjerodajnice”Nametnite snažne lozinke za administrators:
- Koristite najmanje 16 znakova
- Pomiješajte velika i mala slova, brojeve, simbole
- Redovito mijenjajte lozinku (svakih 90 dana)
- Koristite upravitelj lozinki
- Omogućite dvofaktorsku provjeru autentičnosti ako je dostupna
Pratite aktivnost administratora
Section titled “Pratite aktivnost administratora”Omogući admin bilježenje prijave:
administratorska ploča > Sustav > Postavke > Korisničke postavke
Log Admin Logins: YesLog Failed Login Attempts: YesAlert Email on Admin Login: YesRedovito pregledavajte zapisnike:
# 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;EOFRedovito održavanje
Section titled “Redovito održavanje”Ažurirajte XOOPS i module
Section titled “Ažurirajte XOOPS i module”Redovno ažurirajte XOOPS i sve modules:
# 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 guideAutomatizirano sigurnosno skeniranje
Section titled “Automatizirano sigurnosno 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;EOFRedovite sigurnosne kopije
Section titled “Redovite sigurnosne kopije”Automatizirajte dnevne sigurnosne 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)"Raspored 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>&1predložak sigurnosne kontrolne liste
Section titled “predložak sigurnosne kontrolne liste”Koristite ovaj predložak za redovite sigurnosne 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. ___________Sigurnosni resursi
Section titled “Sigurnosni resursi”- Zahtjevi poslužitelja
- Osnovna konfiguracija
- Optimizacija performansi
- OWASP Top 10: https://owasp.org/www-project-top-ten/
Oznake: #sigurnost #ssl #https #otvrdnjavanje #najbolje prakse
Povezani članci:
- ../Instalacija/Instalacija
- ../../06-Publisher-Module/User-Guide/Basic-Configuration
- Postavke sustava
- ../Instalacija/Nadogradnja-XOOPS