Actions

Installation security hints/de: Difference between revisions

From LimeSurvey Manual

No edit summary
No edit summary
Line 93: Line 93:
Dadurch wird vermieden, dass alle anderen Dateien, zu denen /application/config/config.php gehört, geändert werden müssen, da config.php sie auf die Konfigurationsdatei „umleitet“, die sich in einem Nicht-Webverzeichnis befindet und alle tatsächlichen Konfigurationsinformationen enthält. Sie müssen jedoch configreal.php bearbeiten und die folgenden Parameter ändern, um absolute Verzeichnispfade zu verwenden, damit es ordnungsgemäß funktioniert:
Dadurch wird vermieden, dass alle anderen Dateien, zu denen /application/config/config.php gehört, geändert werden müssen, da config.php sie auf die Konfigurationsdatei „umleitet“, die sich in einem Nicht-Webverzeichnis befindet und alle tatsächlichen Konfigurationsinformationen enthält. Sie müssen jedoch configreal.php bearbeiten und die folgenden Parameter ändern, um absolute Verzeichnispfade zu verwenden, damit es ordnungsgemäß funktioniert:


<div class="mw-translate-fuzzy">
<syntaxhighlight lang="php">
<syntaxhighlight lang="php" enclose="div">
</div>


'basePath' => dirname(dirname('''FILE''')),
'basePath' => dirname(dirname('''FILE''')),

Revision as of 14:13, 3 August 2023

Generelles

LimeSurvey setzt auf eine eigene Sicherheit, die standardmäßig aktiviert ist. Die Autoren dieser Software übernehmen keine Verantwortung und machen keine Ansprüche hinsichtlich der Angemessenheit oder des Sicherheitsniveaus dieser Software. Allerdings nehmen wir Sicherheitsbelange sehr ernst und reagieren schnell. Wenn Sie daher von Sicherheitsproblemen in LimeSurvey wissen, teilen Sie uns dies bitte mit, indem Sie uns entweder eine E-Mail an info@limesurvey.org senden oder einen Fehlerbericht in unserem [http:// bugs.limesurvey.org Bugtracker] (bitte als privat markieren).

Webserver-Einschränkung

Wenn Sie Apache verwenden, fügt LimeSurvey zur Einschränkung eine andere htaccess-Datei hinzu. Stellen Sie sicher, dass Sie htaccess mit AllowOverride aktiviert haben.

Mit einem anderen Webserver oder wenn Sie AllowOverride None verwenden möchten: Sie müssen

  • (Option) Deaktivieren Sie den Zugriff auf alle Dateien in Anwendung, geschützt, Framework und Themes/*/views
  • Deaktivieren Sie den Zugriff auf Datei-Uploads durch Benutzer /upload/surveys/.*/fu_[a-z0-9]
  • (Option) Deaktivieren Sie den Zugriff auf ausführbare Dateien im Upload-Verzeichnis

Ein Beispiel für Nginx finden Sie auf unserer Allgemeine FAQ

Dateirechte in Linux

Wenn Sie einen Linux-Server verwenden, müssen Sie die Dateiberechtigungen entsprechend festlegen, um Ihre LimeSurey-Installation zu sichern.

Grundlegende Fakten über Linux/*nix Dateiberechtigungen

Ein Linux/*nix System ist normalerweise ein Mehrbenutzersystem. Das bedeutet, dass abgesehen von Ihrem persönlichen Zugang noch andere Benutzerzugänge auf dem System bestehen könnten und daher sollten Sie darauf achten, welche Berechtigungen Sie diesen anderen Benutzern geben.

'Hinweis: Das Festlegen von Dateiberechtigungen ist besonders wichtig, um Konfigurationsdateien mit kritischen Daten wie Passwörtern zu schützen.

'Bedenken Sie, dass dem Root-Konto immer die Berechtigung zum Zugriff auf Ihre Dateien gewährt wird (unabhängig von den von Ihnen festgelegten Dateiberechtigungen), da es sich um den Superadministrator handelt.

Der Webserver (auf dem LimeSurvey läuft) läuft ebenfalls unter einer bestimmten Identität (Benutzer). Unter Linux ist dies normalerweise der Benutzer „www“, „www-data“ (unter Debian/Ubuntu), „Apache“ oder „nobody“. Einige Hosting-Unternehmen verwenden jedoch Systeme (wie z. B. suexec), die es ermöglichen, LimeSurvey-Skripte mit Ihrem persönlichen Benutzer auszuführen. Natürlich muss der Webserver-Benutzer das Recht haben, LimeSurvey-Dateien zu lesen. Allerdings darf nur eine kleine Teilmenge der LimeSurvey-Unterverzeichnisse vom Webserverbenutzer beschreibbar sein.

Hinweis: Es ist sehr nützlich, dem Webserverbenutzer die Schreibberechtigung für diese LimeSurvey-Unterverzeichnisse zu entziehen, die diese nicht benötigen. Selbst wenn eine LimeSurvey-Schwachstelle entdeckt wird, sind die Hauptdateien dank der Dateisystemberechtigungen dennoch vor einer unerlaubten Änderung geschützt.

Setzen von Berechtigungen auf einem selbstverwalteten Linux-System

Wenn Sie die Konfiguration Ihres Webservers und Betriebssystems verwalten (Sie sind Eigentümer des physischen Servers oder mieten einen virtuellen Server, auf den Sie Root-Zugriff haben), können Sie die folgenden Empfehlungen berücksichtigen.

Sie können zunächst den Eigentümer und die Gruppe Ihrer LimeSurvey-Dateien festlegen, um die Einrichtung der Dateiberechtigungen zu vereinfachen. Eine mögliche Strategie besteht darin, den Eigentümer der LimeSurvey-Dateien auf Ihren persönlichen Benutzernamen und die Gruppe der LimeSurvey-Dateien auf die Webservergruppe festzulegen. Normalerweise enthält diese Webservergruppe nur das Webserverkonto (und möglicherweise ein weiteres Webmasterkonto). Wenn Ihr Benutzername beispielsweise „myaccount“ lautet und der Webserver-Benutzer „apache“ in der Gruppe „apache“ ist, können Sie über einen Shell-Zugriff den folgenden Befehl verwenden: $ chown -R myaccount:apache limesurvey/ . Anschließend legen Sie die Datei- und Unterverzeichnisberechtigungen fest.

Damit das Skript ordnungsgemäß funktioniert, ist Schreibzugriff auf einige Verzeichnisse erforderlich:

  • Das Verzeichnis /limesurvey/application/config erfordert „Lesen und Schreiben“, um die Anwendungskonfigurationseinstellungen zu speichern
  • Das Verzeichnis /limesurvey/tmp und seine Unterverzeichnisse werden für Importe/Uploads verwendet und sollten für Ihren Webserver auf „Lesen und Schreiben“ eingestellt sein
  • Das Upload-/Verzeichnis und alle seine Unterverzeichnisse müssen dazu ebenfalls über die Berechtigungen „Lesen und Schreiben“ verfügen Hochladen von Bildern und Mediendateien aktivieren
  • Alle anderen Verzeichnisse und Dateien können auf „Schreibgeschützt“ gesetzt werden.
'Hinweis: Angenommen, Sie haben die oben genannten Empfehlungen für Eigentümer/Gruppe befolgt, können diese Einstellungen mit den folgenden Befehlen angewendet werden:

$ chmod -R o-r-w-x limesurvey/

$ chmod -R -w limesurvey/

$ chmod -R 770 limesurvey/application/config

$ chmod -R 770 limesurvey/tmp

$ chmod -R 770 limesurvey/upload

Festlegen von Dateiberechtigungen auf einem gehosteten Webserver

Angesichts der Schwierigkeit eines Standardverfahrens zum Sichern einer Webanwendung in einer gehosteten Umgebung ist dies ziemlich schwierig, da sich gehostete Umgebungen in vielerlei Hinsicht unterscheiden.

Damit das Skript funktioniert, muss es Schreibzugriff auf einige Verzeichnisse haben:

  • Das "/limesurvey/tmp" Verzeichnis und dessen Unterverzeichnisse sind für Importe/Uploads sollte auf "Lesen & Schreiben" für deinen Webserver gesetzt sein.
  • Das upload/ Verzeichnis und alle Unterverzeichnisse müssen auch "Lesen & Schreiben" für Ihren Webserver gesetzt habe, um es zu ermöglichen Bild- und Mediendateien hochzuladen.
  • Alle anderen Verzeichnisse und Dateien können auf "Nur Lesen" gesetzt werden.
Hinweis:
  • Abhängig von Ihrer Webserverkonfiguration müssen Sie die Rechte für die beschreibbaren Ordner auf 755 oder 777 ändern, um sie für das Web beschreibbar zu machen Server. Versuchen Sie es zuerst mit 755. Wenn es nicht funktioniert, führen Sie ein „Upgrade“ auf 777 aus! ' bis 755

Dateirechte in Windows

Wenn Sie einen Windows-Server verwenden, sollten Sie sicherstellen, dass der Admin-Ordner es dem Eigentümer des Webserverprozesses ermöglicht, Dateien in dieses Verzeichnis zu schreiben. Die restlichen Dateien können auf schreibgeschützt und ausgeführt werden.

Weitere Sicherheitsvorkehrungen

Die Datei config.php beinhaltet den Benutzernamen und das dazugehörige Passwort für den Datenbankserver. Dieses zieht weitere Sicherheitsaspekte nach sich, insbesondere, wenn sie einen Benutzer mit weitreichenden Zugriffsrechten auf die Datenbank verwenden. Wenn sie das Risiko etwas minimieren möchten, empfiehlt es sich, einen eigenen Benutzer anzulegen, welche nur über die entsprechenden Rechte verfügt, welche für eine Verwendung von LimeSurvey von Nöten sind.

SSL-Nutzung

Wir empfehlen generell die Verwendung von SSL für sensible Umfragedaten. Normalerweise aktivieren Sie SSL, indem Sie Ihren Webserver richtig konfigurieren und ein SSQL-Zertifikat verwenden. Wenn Sie SSL aktiviert haben, sollten Sie SSL in den globalen Einstellungen von LimeSurvey ständig erzwingen. Darüber hinaus können Sie nur die Verwendung von „sicheren“ Cookies festlegen, indem Sie die entsprechende Option in config.php bearbeiten.

Der Zugriff auf die Datei config.php

Template:Alarm

Die Datei /application/config/config.php enthält einen Benutzernamen und ein Passwort für Ihren Datenbankserver. Dies wirft bestimmte Sicherheitsprobleme auf, insbesondere wenn Sie eine Anmeldung verwenden, die über einen hohen Verwaltungszugriff auf Ihre Datenbank verfügt. Im Falle eines Fehlers bei der Rückgabe des Inhalts dieser PHP-Datei an den Browser eines Benutzers könnten Ihr Datenbankkennwort und andere Daten kompromittiert werden (dies ist jedoch ein sehr unwahrscheinliches Szenario). Der beste Weg, das Risiko zu minimieren, besteht darin, ein bestimmtes Login einzurichten, das nur bestimmte Rechte für Ihre LimeSurvey-Datenbank hat.

Eine andere Möglichkeit, diese Informationen zu sichern, besteht darin, die Informationen aus der Datei /application/config/config.php in einem Nicht-Web-Verzeichnis abzulegen, d. h. für Apache-Benutzer ist dies das Verzeichnis über dem Ordner htdocs (auch bekannt als public_html oder www). . Grundsätzlich verwenden Sie config.php, haben aber eine Zeile darin – eine Zeile, die die Datei mit den TATSÄCHLICHEN Konfigurationsinformationen enthält (z. B.:<?php return include("/home/hostfolder/safedata/configreal.php"); ?> ). Entfernen Sie alle tatsächlichen Konfigurationsinformationen aus /application/config/config.php und fügen Sie sie in die andere Datei (configreal.php) ein, die in der Datei /application/config/config.php erwähnt wird. Diese andere Datei sollte sich in einem Nicht-Webverzeichnis befinden. Dann enthält /application/config/config.php keine Datenbankkennwörter usw., sondern nur den Namen der Datei, die die Datenbankinformationen enthält.

Dadurch wird vermieden, dass alle anderen Dateien, zu denen /application/config/config.php gehört, geändert werden müssen, da config.php sie auf die Konfigurationsdatei „umleitet“, die sich in einem Nicht-Webverzeichnis befindet und alle tatsächlichen Konfigurationsinformationen enthält. Sie müssen jedoch configreal.php bearbeiten und die folgenden Parameter ändern, um absolute Verzeichnispfade zu verwenden, damit es ordnungsgemäß funktioniert:

'basePath' => dirname(dirname('''FILE''')),
'runtimePath' => dirname(dirname(dirname('''FILE'''))).DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'runtime',
[...]

'urlManager' => array(
   [...]
   'rules' => require('routes.php'),
   [...]
);

um absolute Dateipfade zu nutzen. Beispiel:

'basePath' => '/var/www/htdocs/limesurvey',
'runtimePath' => '/var/www/htdocs/limesurvey/tmp/runtime',
[...]

'urlManager' => array(
   [...]
   'rules' => require('/var/www/htdocs/limesurvey/config/routes.php'),
   [...]
);

Verwenden Sie "admin" nicht als Standard-Benutzer. Gehen Sie zu Ihrer MySQL-Datenbank (oder welchem Datenbanktyp auch immer) und ändern Sie den Standard-Benutzernamen "admin" auf was immer Sie bevorzugen (Z. B. "admin_xyz"). Es wird jetzt viel schwerer sein, den Administrator-Benutzernamen zu erraten. Denken Sie daran, das dies einer der beiden Variablen ist die Eindringlinge verwenden können, um Zugang zu erhalten. Das admin-Passwort ist die andere Variable. So wählen Sie dies sehr sorgfältig - je länger, je besser.


Inhaltssicherheitsrichtlinie (CSP)

'HAFTUNGSAUSSCHLUSS – Das hier bereitgestellte CSP ist nur ein Beispiel und darf nicht wörtlich verwendet werden. Es ist als Ausgangspunkt gedacht und Sie MÜSSEN es an Ihre Bedürfnisse anpassen und gründlich testen. <IfModule mod_headers.c> Header setzt immer Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; base-uri 'none'; form-action 'self'; frame-ancestors 'self'; upgrade-insecure-requests" "expr=%{CONTENT_TYPE} =~ m#text\/(html|javascript )|application\/pdf|xml#i" </IfModule>