HTTPS-Umstellung: Sicherheitswarnung beheben

Quell-ID: GitHub Discussion #38

Use Case

Nach der Umstellung einer Website auf HTTPS zeigt das REDAXO-Backend Sicherheitswarnungen an, dass bestimmte Ordner nicht sicher sind.

Verwendete AddOns

  • REDAXO Core
  • YRewrite

Problemstellung

Nach der Aktivierung von HTTPS erscheint im Backend eine Meldung, dass die Ordner data, core, cache und bin nicht sicher sind.

Lösung

Wenn YRewrite installiert ist, müssen folgende Schritte durchgeführt werden:

1. .htaccess neu setzen

  1. Im Backend zu “YRewrite” > “Setup” navigieren
  2. Die Option “.htaccess-Datei neu setzen” ausführen

2. Domain-Einstellungen prüfen

In den YRewrite-Einstellungen sicherstellen, dass die HTTPS-Domain korrekt angelegt ist:

  1. “YRewrite” > “Domains”
  2. Domain-Eintrag bearbeiten
  3. URL mit https:// eintragen

3. Systemeinstellungen aktualisieren

  1. “System” > “Einstellungen”
  2. Server-URL auf HTTPS aktualisieren

Checkliste für HTTPS-Umstellung

- [ ] SSL-Zertifikat auf dem Server installiert
- [ ] YRewrite .htaccess neu generieren
- [ ] Domain in YRewrite auf HTTPS umstellen
- [ ] System-URL auf HTTPS ändern
- [ ] Cache leeren
- [ ] Mixed-Content-Warnungen prüfen
- [ ] Alle internen Links auf HTTPS prüfen

Besserer Ansatz: HTTPS erzwingen

In der .htaccess (manuell)

# HTTPS erzwingen
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Per PHP (in boot.php)

<?php
// In boot.php des project-AddOns

if (rex::isFrontend() && !rex_request::isHttps()) {
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], true, 301);
    exit;
}

Sichere Cookies erzwingen

<?php
// In boot.php
if (rex::isBackend()) {
    ini_set('session.cookie_secure', '1');
    ini_set('session.cookie_httponly', '1');
    ini_set('session.cookie_samesite', 'Strict');
}

Content Security Policy für HTTPS

<?php
// In boot.php für das Frontend
if (rex::isFrontend()) {
    header("Content-Security-Policy: upgrade-insecure-requests");
    header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
}

Mixed Content beheben

Nach der HTTPS-Umstellung können “Mixed Content”-Warnungen auftreten, wenn HTTP-Ressourcen geladen werden.

Häufige Ursachen

  1. Medienpool: Alte URLs in der Datenbank
  2. Module: Hardcoded HTTP-URLs
  3. Externe Ressourcen: JavaScript/CSS von HTTP-Quellen

Lösung für Medienpool-URLs

<?php
// Einmal-Script zum Aktualisieren von HTTP-URLs in Slices
$sql = rex_sql::factory();
$sql->setQuery('
    UPDATE ' . rex::getTable('article_slice') . '
    SET value1 = REPLACE(value1, "http://example.com", "https://example.com"),
        value2 = REPLACE(value2, "http://example.com", "https://example.com"),
        value3 = REPLACE(value3, "http://example.com", "https://example.com")
');

Prüfen auf Mixed Content

// Im Browser-Console ausführen
document.querySelectorAll('*[src^="http://"], *[href^="http://"]').forEach(el => {
    console.log('Mixed content:', el.tagName, el.src || el.href);
});

Sicherheitsordner prüfen

Die Warnung bezüglich der Ordner bedeutet, dass diese von außen erreichbar sein könnten. Die .htaccess sollte folgende Regeln enthalten:

# Zugriff auf sensible Verzeichnisse blockieren
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    # Blockiere direkten Zugriff auf redaxo-Ordner
    RewriteRule ^redaxo/data - [F]
    RewriteRule ^redaxo/cache - [F]
    RewriteRule ^redaxo/bin - [F]
</IfModule>