Actions

Installations-Sicherheitshinweise

From LimeSurvey Manual

Revision as of 18:32, 25 July 2023 by Maren.fritz (talk | contribs)

Generelles

LimeSurvey hat ein eigenes Sicherheitssystem eingebaut, welches standardmäßig aktiviert ist. Das LimeSurvey-Projekt übernimmt keine wie immer gearteten Forderungen, Haftungen, Ansprüche etc., welche sich aus ihrem Einsatz mit LimeSurvey ergeben, natürlich auch jenen, welche auf mangelnde Sicherheitsvorkehrungen ihrerseits beruhen. Kurz: gehen sie davon aus, dass LimeSurvey als unsicher gilt, solange sie nicht selber für entsprechende Sicherheitsvorkehrungen sorgen. Trotzdem nehmen wir Sicherheitsprobleme sehr ernst und reagieren schnell - wenn Sie also von einem Sicherheitsproblem mit LimeSurvey Kenntnis haben, so lassen Sie uns dies bitte wissen: info@limesurvey.org oder erstellen Sie einen Fehlerreport in unserem Bug Tracker (markieren Sie diesen bitte als 'private').

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.

You can first set the owner and group of your LimeSurvey files so that it will ease the file permissions setup. A possible strategy is to set the owner of the LimeSurvey files to your personal username, and the group of the LimeSurvey files to the web server group. Usually, this web server group only contains the web server account (and possibly another webmaster account). For instance, if your username is 'myaccount' and the webserver user is 'apache' in the 'apache' group, then, from a shell access, you can use the following command: $ chown -R myaccount:apache limesurvey/. Subsequently, set the file and sub-directories permissions.

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 hoch zu laden.
  • Alle anderen Verzeichnisse und Dateien können auf "Nur Lesen" gesetzt werden.
Datei:help.png Hinweis: Angenommen, dass Sie die oben genannten Empfehlungen für Besitzer/Gruppe befolgt haben, können diese Einstellungen mit folgenden Befehlen angewendet werden:

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

$ chmod -R -w limesurvey/

$ chmod -R 770 limesurvey/tmp

$ chmod -R 770 limesurvey/tmp

$ chmod -R 770 limesurvey/upload

Dateirechte mit Windows

Wenn sie einen Windows Webserver verwenden sollten sie sicherstellen, dass der Benutzer des Webserver-Prozess Schreibrechte auf das admin Verzeichnis hat. Für alle anderen Dateien genügen "nur Lesen" und "Ausführen"-Rechte.

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 hoch zu laden.
  • Alle anderen Verzeichnisse und Dateien können auf "Nur Lesen" gesetzt werden.
Datei:help.png 'Hinweis:
  • Je nach Webserver-Konfiguration müssen Sie mit denm Befehl chmod die Rechte für beschreibbare Ordner auf 755 oder 777 setzen, um diese für den Webserver beschreibbar zu machen. Versuchen 755 zuerst - wenn es nicht funktioniert 'aktualisiere' auf 777.
  • Sie können auch versuchen, den Zugriff auf config.php für anderen zu beschränken, indem Sie diese Datei-Berechtigungen auf 750 setzen - wenn es nicht funktioniert 'aktualisiere' auf 755.

Dateirechte in Windows

Wenn Sie einem Windows-Server benutzen, sollten Sie sicherstellen, dass im Ordner "admin" es dem Eigentümer des webserver-Prozesses erlaubt ist Dateien in dieses Verzeichnis zu schreiben, aber alle anderen Dateien können auf nur Lesen und Ausführen gesetzt 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

Im Allgemeinen empfehlen wir die Verwendung von SSL für sensible Umfragedaten. In der Regel aktivieren Sie SSL durch korrekte Konfiguration Ihres Webservers mit einem SSL Zertifikat. Wenn Sie SSL aktiviert haben, sollten Sie 'SSL erzwingen'in den globalen Einstellungen von LimeSurvey setzen. Zusätzlich sollten Sie einstellen, dass nur 'Secure Cookies' genutzt werden. Dies können Sie in config.php aktivieren.

Zugang zur config.php Datei

Die Datei /application/config/config.php enthält einen Benutzernamen und ein Kennwort für Ihren Datenbank-server. Dies birgt gewisse Sicherheitsrisiken, vor allem, wenn Sie ein Login benutzen, das weitgehenden administrativen Zugriff auf Ihre Datenbank hat. Im Falle, dass ein Fehler den Inhalt dieser PHP-Datei offenbart, sind ihr Kennwort für die Datenbank und andere Details gefährdet (bitte beachten Sie, dass dies sehr unwahrscheinlich ist). Der beste Weg, um das Risiko zu minimieren, ist das Einrichten eines bestimmten Login mit begrenzten Rechten nur für Ihre LimeSurvey-Datenbank.

Ein anderer Weg, um diese Informationen zu sichern sein kann, das man bestimmte Informationen aus der /application/config/config.php-Datei in einem Nicht-Web-Verzeichnis abgelegt, also für Apache Anwender ist dies das Verzeichnis pberhalb des htdocs (aka public_html oder www) Ordners. So verwenden Sie config.php, die aber nur eine Zeile enthält - eine Zeile, die die Datei mit den richtigen Konfigurationsinformationen enthält (z.B.: <?php return include("/home/hostfolder/safedata/configreal.php");?>). Entfernen Sie alle aktuellen Konfigurationsdaten aus /application/config/config.php und fügen Sie ihn in der anderen Datei (configreal.php) ein, die von /application/config/config.php inkludiert wird. Diese andere Datei sollte sich in einem Nicht-Web-Verzeichnis befinden. Dann wird die Datei /application/config/config.phpkeine Datenbank-Passwörter usw. enthalten - nur den Namen der Datei, die die Datenbankinfos wiklich beinhaltet. Dadurch wird vermieden, dass man alle anderen Dateien, die /application/config/config.php nutzen, ändern muss. Allerdings müssen Sie configreal.php bearbeiten und die folgenden Parameter ändern,

This avoids having to change all the other files that include /application/config/config.php, since config.php 're-directs them' towards the configuration file that is located in a non-web directory which includes all the real configuration information. However, you will need to edit configreal.php and change the follow parameters to use absolute directory paths to work properly:

</div>

'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.


Content Security Policy (CSP)

DISCLAIMER - The CSP provided here is an example only and is not meant to used verbatim. It is meant as a starting point and you MUST adapt it to your needs and test it thoroughly.

<IfModule mod_headers.c>
        Header always set 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>