Διαμόρφωση ασφαλείας
XOOPS Διαμόρφωση ασφαλείας
Ενότητα με τίτλο «XOOPS Διαμόρφωση ασφαλείας»Πλήρης οδηγός για την ασφάλεια της εγκατάστασης XOOPS από κοινά τρωτά σημεία ιστού.
Λίστα ελέγχου ασφαλείας
Ενότητα με τίτλο «Λίστα ελέγχου ασφαλείας»Πριν ξεκινήσετε τον ιστότοπό σας, εφαρμόστε αυτά τα μέτρα ασφαλείας:
- Τα δικαιώματα αρχείου ορίστηκαν σωστά (644/755)
- Ο φάκελος εγκατάστασης αφαιρέθηκε ή προστατεύτηκε
- κύριο αρχείο.php protected from modification
- SSL/HTTPS ενεργοποιημένο σε όλες τις σελίδες
- Ο φάκελος διαχειριστή μετονομάστηκε ή προστατεύεται
- Τα ευαίσθητα αρχεία δεν είναι προσβάσιμα στον ιστό
- .htaccess ισχύουν περιορισμοί
- Αυτοματοποιημένα τακτικά αντίγραφα ασφαλείας
- Οι κεφαλίδες ασφαλείας διαμορφώθηκαν
- CSRF ενεργοποιημένη η προστασία
- SQL ενεργές προστασίες έγχυσης
- Modules/extensions ενημερώθηκε
Ασφάλεια συστήματος αρχείων
Ενότητα με τίτλο «Ασφάλεια συστήματος αρχείων»# Δικαιώματα αρχείου
Ενότητα με τίτλο «# Δικαιώματα αρχείου»Τα σωστά δικαιώματα αρχείων είναι ζωτικής σημασίας για την ασφάλεια.
# Οδηγίες άδειας
Ενότητα με τίτλο «# Οδηγίες άδειας»| Μονοπάτι | Άδειες | Ιδιοκτήτης | Λόγος |
|---|---|---|---|
| κύριο αρχείο.php | 644 | root | Contains DB credentials |
| *.php files | 644 | root | Prevent unauthorized modification |
| Κατάλογοι | 755 | ρίζα | Επιτρέψτε την ανάγνωση, αποτρέψτε τη γραφή |
| cache/ | 777 | www-data | Ο διακομιστής Ιστού πρέπει να γράφει |
| templates_c/ | 777 | www-data | Μεταγλωττισμένα πρότυπα |
| μεταφορτώσεις/ | 777 | www-data | Μεταφορτώσεις χρηστών |
| var/ | 777 | www-data | Μεταβλητά δεδομένα |
| εγκατάσταση/ | Αφαίρεση | - | Διαγραφή μετά την εγκατάσταση |
| configs/ | 755 | ρίζα | Αναγνώσιμο, μη εγγράψιμο |
# Ρύθμιση σεναρίου δικαιωμάτων
Ενότητα με τίτλο «# Ρύθμιση σεναρίου δικαιωμάτων»#!/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!"Εκτελέστε το σενάριο:
chmod +x /usr/local/bin/xoops-secure.sh/usr/local/bin/xoops-secure.sh# Κατάργηση φακέλου εγκατάστασης
Ενότητα με τίτλο «# Κατάργηση φακέλου εγκατάστασης»CRITICAL: Ο φάκελος εγκατάστασης πρέπει να αφαιρεθεί μετά την εγκατάσταση!
# 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 install# Προστασία ευαίσθητων καταλόγων
Ενότητα με τίτλο «# Προστασία ευαίσθητων καταλόγων»Δημιουργήστε αρχεία .htaccess για να αποκλείσετε την πρόσβαση στον ιστό σε ευαίσθητους φακέλους:
Αρχείο: /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>Αρχείο: /var/www/html/XOOPS/templates_c/.htaccess
<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar)$"> Deny from all</FilesMatch>
Options -IndexesΑρχείο: /var/www/html/XOOPS/cache/.htaccess
Options -Indexes<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7)$"> Deny from all</FilesMatch># Προστασία καταλόγου μεταφόρτωσης
Ενότητα με τίτλο «# Προστασία καταλόγου μεταφόρτωσης»Αποτρέψτε την εκτέλεση σεναρίων στις μεταφορτώσεις:
Αρχείο: /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 Διαμόρφωση
Ενότητα με τίτλο «SSL/HTTPS Διαμόρφωση»Κρυπτογραφήστε όλη την κίνηση μεταξύ των χρηστών και του διακομιστή σας.
# Λήψη πιστοποιητικού SSL
Ενότητα με τίτλο «# Λήψη πιστοποιητικού SSL»Επιλογή 1: Δωρεάν πιστοποιητικό από το 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: Εμπορικό Πιστοποιητικό SSL
Επικοινωνήστε με τον πάροχο ή τον καταχωρητή SSL:
- Αγορά πιστοποιητικού SSL
- Επαληθεύστε την ιδιοκτησία του τομέα
- Εγκαταστήστε αρχεία πιστοποιητικών στον διακομιστή
- Διαμόρφωση διακομιστή web
# Διαμόρφωση Apache SSL
Ενότητα με τίτλο «# Διαμόρφωση Apache SSL»Δημιουργία εικονικού κεντρικού υπολογιστή HTTPS:
Αρχείο: /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>Ενεργοποιήστε τη διαμόρφωση:
# 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 apache2# Nginx SSL Διαμόρφωση
Ενότητα με τίτλο «# Nginx SSL Διαμόρφωση»Αρχείο: /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;}Ενεργοποιήστε τη διαμόρφωση:
ln -s /etc/nginx/sites-available/xoops /etc/nginx/sites-enabled/nginx -tsystemctl restart nginx# Επαλήθευση HTTPS εγκατάστασης
Ενότητα με τίτλο «# Επαλήθευση 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/# Αυτόματη ανανέωση Let’s Encrypt Certificate
Ενότητα με τίτλο «# Αυτόματη ανανέωση Let’s Encrypt Certificate»# Enable auto-renewalsystemctl enable certbot.timersystemctl start certbot.timer
# Test renewal processcertbot renew --dry-run
# Manual renewal if neededcertbot renew --force-renewalΑσφάλεια εφαρμογών Ιστού
Ενότητα με τίτλο «Ασφάλεια εφαρμογών Ιστού»# Προστασία από SQL ένεση
Ενότητα με τίτλο «# Προστασία από SQL ένεση»Το XOOPS χρησιμοποιεί παραμετροποιημένα ερωτήματα (ασφαλή από προεπιλογή), αλλά πάντα:
// 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']));# Πρόληψη σεναρίων μεταξύ τοποθεσιών (XSS)
Ενότητα με τίτλο «# Πρόληψη σεναρίων μεταξύ τοποθεσιών (XSS)»Να απολυμαίνονται πάντα τα στοιχεία του χρήστη:
// 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']);# Παραχάραξη αιτημάτων μεταξύ τοποθεσιών (CSRF) Πρόληψη
Ενότητα με τίτλο «# Παραχάραξη αιτημάτων μεταξύ τοποθεσιών (CSRF) Πρόληψη»Το XOOPS περιλαμβάνει προστασία διακριτικού CSRF. Να συμπεριλαμβάνετε πάντα κουπόνια:
<!-- In forms --><form method="post"> {xoops_token form=update} <input type="text" name="field"> <input type="submit"></form># Απενεργοποιήστε την εκτέλεση PHP στον φάκελο μεταφόρτωσης
Ενότητα με τίτλο «# Απενεργοποιήστε την εκτέλεση PHP στον φάκελο μεταφόρτωσης»Αποτρέψτε τους εισβολείς να ανεβάσουν και να εκτελέσουν το 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-only# Κεφαλίδες ασφαλείας
Ενότητα με τίτλο «# Κεφαλίδες ασφαλείας»Διαμόρφωση σημαντικών κεφαλίδων ασφαλείας 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'"Ασφάλεια πίνακα διαχειριστή
Ενότητα με τίτλο «Ασφάλεια πίνακα διαχειριστή»# Μετονομασία φακέλου διαχειριστή
Ενότητα με τίτλο «# Μετονομασία φακέλου διαχειριστή»Προστατέψτε το φάκελο διαχειριστή μετονομάζοντάς τον:
# 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/Διαμορφώστε το XOOPS για να χρησιμοποιήσετε τον μετονομασμένο φάκελο:
Επεξεργασία mainfile.php:
// Change this linedefine('XOOPS_ADMIN_PATH', '/var/www/html/xoops/myadmin123');# Λευκή λίστα IP για διαχειριστή
Ενότητα με τίτλο «# Λευκή λίστα IP για διαχειριστή»Περιορίστε την πρόσβαση διαχειριστή σε συγκεκριμένες IP:
Αρχείο: /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>Ή με το Apache 2.2:
Order Deny,AllowDeny from allAllow from 192.168.1.100 203.0.113.50# Ισχυρά διαπιστευτήρια διαχειριστή
Ενότητα με τίτλο «# Ισχυρά διαπιστευτήρια διαχειριστή»Επιβολή ισχυρών κωδικών πρόσβασης για διαχειριστές:
- Χρησιμοποιήστε τουλάχιστον 16 χαρακτήρες
- Αναμείξτε κεφαλαία, πεζά, αριθμούς, σύμβολα
- Αλλάζετε τον κωδικό πρόσβασης τακτικά (κάθε 90 ημέρες)
- Χρησιμοποιήστε έναν διαχειριστή κωδικών πρόσβασης
- Ενεργοποιήστε τον έλεγχο ταυτότητας δύο παραγόντων εάν είναι διαθέσιμος
# Παρακολούθηση δραστηριότητας διαχειριστή
Ενότητα με τίτλο «# Παρακολούθηση δραστηριότητας διαχειριστή»Ενεργοποίηση καταγραφής σύνδεσης διαχειριστή:
Πίνακας διαχειριστή > Σύστημα > Προτιμήσεις > Ρυθμίσεις χρήστη
Log Admin Logins: YesLog Failed Login Attempts: YesAlert Email on Admin Login: YesΕλέγχετε τακτικά τα αρχεία καταγραφής:
# 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;EOFΤακτική συντήρηση
Ενότητα με τίτλο «Τακτική συντήρηση»# Ενημερώστε το XOOPS και τις ενότητες
Ενότητα με τίτλο «# Ενημερώστε το XOOPS και τις ενότητες»Διατηρήστε ενημερωμένα το XOOPS και όλες τις ενότητες:
# 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 guide# Αυτοματοποιημένη σάρωση ασφαλείας
Ενότητα με τίτλο «# Αυτοματοποιημένη σάρωση ασφαλείας»#!/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;EOF# Τακτικά αντίγραφα ασφαλείας
Ενότητα με τίτλο «# Τακτικά αντίγραφα ασφαλείας»Αυτοματοποιήστε τα καθημερινά αντίγραφα ασφαλείας:
#!/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)"Πρόγραμμα με 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>&1Πρότυπο λίστας ελέγχου ασφαλείας
Ενότητα με τίτλο «Πρότυπο λίστας ελέγχου ασφαλείας»Χρησιμοποιήστε αυτό το πρότυπο για τακτικούς ελέγχους ασφαλείας:
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. ___________Πόροι ασφαλείας
Ενότητα με τίτλο «Πόροι ασφαλείας»- Απαιτήσεις διακομιστή
- Βασική διαμόρφωση
- Βελτιστοποίηση απόδοσης
- OWASP Top 10: https://owasp.org/www-project-top-ten/
Ετικέτες: #security #ssl #https #hardening #best-practices
Σχετικά άρθρα:
- ../Installation/Installation
- ../../06-Publisher-Module/User-Guide/Basic-Configuration
- Ρυθμίσεις συστήματος
- ../Installation/Upgrading-XOOPS