תצורת אבטחה
XOOPS תצורת אבטחה
Section titled “XOOPS תצורת אבטחה”מדריך מקיף לאבטחת התקנת XOOPS שלך מפני פרצות אינטרנט נפוצות.
רשימת אבטחה
Section titled “רשימת אבטחה”לפני השקת האתר שלך, יישם את אמצעי האבטחה הבאים:
- הרשאות הקובץ מוגדרות כהלכה (644/755)
- תיקיית ההתקנה הוסרה או מוגנת
- mainfile.php מוגן מפני שינויים
- SSL/HTTPS מופעל בכל הדפים
- שם תיקיית הניהול שונה או מוגנת
- קבצים רגישים אינם נגישים לאינטרנט
- הגבלות .htaccess קיימות
- גיבויים רגילים אוטומטיים
- כותרות אבטחה מוגדרות
- הגנה CSRF מופעלת
- SQL הגנות הזרקה פעילות
- Modules/extensions עודכן
אבטחת מערכת הקבצים
Section titled “אבטחת מערכת הקבצים”הרשאות קובץ
Section titled “הרשאות קובץ”הרשאות קבצים נכונות הן קריטיות לאבטחה.
הנחיות הרשאה
Section titled “הנחיות הרשאה”| נתיב | הרשאות | בעלים | סיבה |
|---|---|---|---|
| mainfile.php | 644 | שורש | מכיל אישורי DB |
| * קבצי php | 644 | שורש | מנע שינוי לא מורשה |
| מדריכים | 755 | שורש | אפשר קריאה, מנע כתיבה |
| cache/ | 777 | www-data | שרת האינטרנט חייב לכתוב |
| templates_c/ | 777 | www-data | תבניות מלוקטות |
| העלאות/ | 777 | www-data | העלאות משתמשים |
| var/ | 777 | www-data | נתונים משתנים |
| התקן/ | הסר | - | מחק לאחר ההתקנה |
| configs/ | 755 | שורש | קריא, לא ניתן לכתיבה |
סקריפט הגדרת הרשאות
Section titled “סקריפט הגדרת הרשאות”#!/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הסר את תיקיית ההתקנה
Section titled “הסר את תיקיית ההתקנה”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הגן על ספריות רגישות
Section titled “הגן על ספריות רגישות”צור קובצי 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>הגן על ספריית העלאות
Section titled “הגן על ספריית העלאות”מנע ביצוע של סקריפטים בהעלאות:
קובץ: /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 תצורה
Section titled “SSL/HTTPS תצורה”הצפין את כל התעבורה בין המשתמשים לשרת שלך.
השג SSL תעודה
Section titled “השג 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
- אמת את הבעלות על הדומיין
- התקן קבצי אישור בשרת
- הגדר את שרת האינטרנט
Apache SSL תצורה
Section titled “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 apache2Nginx SSL תצורה
Section titled “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 התקנה
Section titled “ודא 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/חידוש אוטומטי בואו נצפין אישור
Section titled “חידוש אוטומטי בואו נצפין אישור”# Enable auto-renewalsystemctl enable certbot.timersystemctl start certbot.timer
# Test renewal processcertbot renew --dry-run
# Manual renewal if neededcertbot renew --force-renewalאבטחת יישומי אינטרנט
Section titled “אבטחת יישומי אינטרנט”הגן מפני SQL הזרקה
Section titled “הגן מפני 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).
Section titled “מניעת סקריפטים בין אתרים (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) מניעה
Section titled “זיוף בקשות חוצות אתרים (CSRF) מניעה”XOOPS כולל הגנת אסימון CSRF. כלול תמיד אסימונים:
<!-- In forms --><form method="post"> {xoops_token form=update} <input type="text" name="field"> <input type="submit"></form>השבת PHP ביצוע בתיקיית העלאה
Section titled “השבת 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כותרות אבטחה
Section titled “כותרות אבטחה”הגדר כותרות אבטחה חשובות 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'"אבטחת לוח הניהול
Section titled “אבטחת לוח הניהול”שנה את שם תיקיית הניהול
Section titled “שנה את שם תיקיית הניהול”הגן על תיקיית הניהול על ידי שינוי שמה:
# 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 עבור מנהל מערכת
Section titled “רישום הלבנה של 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אישורי מנהל חזקים
Section titled “אישורי מנהל חזקים”לאכוף סיסמאות חזקות עבור מנהלי מערכת:
- השתמש ב-16 תווים לפחות
- מערבבים אותיות רישיות, קטנות, מספרים, סמלים
- שנה סיסמה באופן קבוע (כל 90 יום)
- השתמש במנהל סיסמאות
- אפשר אימות דו-גורמי אם זמין
עקוב אחר פעילות הניהול
Section titled “עקוב אחר פעילות הניהול”אפשר רישום התחברות של מנהל מערכת:
לוח ניהול > מערכת > העדפות > הגדרות משתמש
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תחזוקה שוטפת
Section titled “תחזוקה שוטפת”עדכן XOOPS ומודולים
Section titled “עדכן 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סריקת אבטחה אוטומטית
Section titled “סריקת אבטחה אוטומטית”#!/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גיבויים רגילים
Section titled “גיבויים רגילים”הפוך גיבויים יומיים לאוטומטיים:
#!/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תבנית רשימת אבטחה
Section titled “תבנית רשימת אבטחה”השתמש בתבנית זו עבור ביקורות אבטחה רגילות:
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. ___________משאבי אבטחה
Section titled “משאבי אבטחה”- דרישות שרת
- תצורה בסיסית
- מיטוב ביצועים
- OWASP 10 המובילים: https://owasp.org/www-project-top-ten/
תגים: #בטחון #ssl #https #הקשחה #שיטות עבודה מומלצות
מאמרים קשורים:
- ../Installation/Installation
- ../../06-Publisher-Module/User-Guide/Basic-Configuration
- הגדרות מערכת
- ../Installation/Upgrading-XOOPS