Actions

Beveiligingstips

From LimeSurvey Manual

This page is a translated version of the page Installation security hints and the translation is 100% complete.

Algemeen

LimeSurvey vertrouwt op zijn eigen beveiliging, die standaard geactiveerd wordt. Echter, de auteurs van de software accepteren geen verantwoordelijkheid voor, en maken geen claims over de veiligheid of geschiktheid van de software. Dat gezegd hebbende zijn we uiteraard zeer benieuwd naar veiligheidslekken. Kom je zoiets tegen, mail ons dan info@limesurvey.org , of open een foutrapport op onze bug tracker (zet deze dan wel graag op privé).

Beperking webserver

Als je apache gebruikt, voegt LimeSurvey verschillende htaccess-bestanden toe voor het beperken van de toegang. Controleer of je htaccess al hebt opgenomen met AllowOverride .

Met een andere webserver of als je AllowOverride None wilt gebruiken: dan moet je

  • (optie) schakel de toegang uit tot alle bestanden in de applicatie, protected, framework en themes/*/views
  • schakel de toegang tot geüploade bestanden uit /upload/surveys/.*/fu_[a-z0-9 ]
  • (optie) schakel de toegang tot het uitvoerbare bestand in de map upload uit

Je kunt een voorbeeld voor nginx vinden op onze Algemene vragen

Linux bestandsrechten

Als je een Linux server gebruikt, stel dan de bestandsrechten vergelijkbaar in om de veiligheid van de LimeSurvey installatie te garanderen.

Linux/*nix bestandsrechten

Een Linux/*nix systeem is multiuser. Dat betekent dat er behalve jouw account mogelijk ook andere "gebruikers" actief zijn op het systeem. Deze "gebruikers" moeten de juiste rechten hebben.

Hint: Het instellen van bestandsrechten is bijzonder belangrijk bij configuratiebestanden, omdat hier gevoelige informatie, zoals wachtwoorden instaat.

Het 'root'-account geeft altijd toegang tot alle bestanden (ongeacht de toegekende rechten), omdat het de super-admin is,

De webserver (waar LimeSurvey op draait) is ook zo'n gebruiker. Op Linux is dit waarschijnlijk de 'www','www-data' (op Debian/Ubuntu), 'apache' of 'nobody'-gebruiker. Ook kan de webhost er voor kiezen om systemen zoals 'suexec' te gebruiken om LimeSurvey-scripts uit te voeren onder jouw account. De webserver moet uiteraard de LimeSurvey-bestanden kunnen lezen. Maar slechts een klein gedeelte van de mappen moet ook schrijfbaar zijn.

Hint: het is zeer nuttig om de schrijfrechten voor de webservergebruiker in te trekken op bepaalde mappen. Mocht er dan een beveiligingslek in de software ontdekt worden, dan worden de bestanden nog steeds beschermd door de bestandsrechten van het systeem.

Instellen van bestandsrechten op een Linuxsysteem in eigen beheer

Als je zelf de webserver beheert (omdat je ofwel de hardware bezit of omdat je een (virtuele) server huurt met root-toegang), lees dan deze aanbevelingen:

Je kunt eerst de owner en group van de LimeSurvey-bestanden bepalen om te kunnen beginnen met het instellen van de rechten. Je kunt bijvoorbeeld je eigen gebruikersnaam owner maken en de webservergroep als group gebruiken. Normaal bevat deze webservergroep alleen het webserver-account (en mogelijk nog een account van een beheerder). Bijvoorbeeld: als je gebruikersnaam 'myaccount' is en de webservergebruiker is 'apache' in de 'apache' groep, dan kun je in een shell het volgende commando gebruiken: $ chown -R myaccount:apache limesurvey/. Zet daarna de rechten op de bestanden en mappen.

Om het script te laten werken heeft het schrijfrechten op de volgende mappen nodig:

  • De /limesurvey/application/config directory heeft Read & Write nodig voor het opslaan van de applicatie configuratie.
  • De /limesurvey/tmp map en alle onderliggende mappen voor het importeren en uploaden
  • De upload/ map en alle onderliggende mappen om media te uploaden
  • Voor alle andere mappen en bestanden volstaan leesrechten.
Hint: Als je het bovenstaand advies over het aanmaken van de eigenaar en groep hebt opgevolgd, stel dan met de volgende commando's de rechten in:

$ 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

</syntaxhighlight>

Instellen van bestandsrechten op een beheerde webserver

Het is lastig om een standaardprocedure te geven voor een webapplicatie op een host, de inrichting kan veel verschillen.

Zoals bij het systeem in eigen beheer moet het script om te werken schrijfrechten hebben op de volgende mappen:

  • De /limesurvey/tmp map en alle onderliggende mappen voor het importeren en uploaden
  • de upload/ map en alle onderliggende mappen om media te uploaden

Alle andere mappen en bestanden kunnen af met alleen leesrechten.

Hint:
  • Afhankelijk van de configuratie van de webserver moet je de rechten met chmod wijzigen naar 755 of 777 om ze beschrijfbaar te maken voor de webserver. Probeer eerst 755: mocht dat niet werken zet ze dan op 777
  • Trek de leesrechten van anderen in door config.php te wijzigen met chmod naar 750. Werkt dat niet, zet de waarde dan op 755

Windows bestandsrechten

Als je een server op basis van Windows gebruikt, verzeker je er dan van dat alleen de eigenaar van het webserver-proces bestanden in de admin-directory kan schrijven. Op alle andere bestanden volstaan de lees- en uitvoerrechten.

Andere beveiligingszaken

De volgende tips zijn adviezen: LimeSurvey zelf is in het algemeen veilig zonder deze aanvullende maatregelen. Mocht je een enquête met zeer vertrouwelijke data hebben, dan kan deze aanvulling je helpen:

SSL gebruik

Voor het gebruik van gevoelige gegevens bevelen we het gebruik van SSL aan. U kunt SSL meestal inschakelen door uw webserver goed in te stellen en een SSQL certificaat te gebruiken. Indien uw SSL heeft ingeschakeld dient u het gebruik van SSL af dwingen in de globale instellingen van LimeSurvey. U kunt dan ook instellen dat alleen 'secure' cookies gebruikt worden, dit gaat met de respective option in config.php.

Toegang tot het bestand config.php

  U moet het bestand application/config/config.php pas na de eerste werkende installatie aanpassen.


De /application/config/config.php bevat een naam en wachtwoord voor de database server. Dit kan een beveiligingsprobleem zijn, zeker als je een login gebruikt die (te)veel in de database "mag". Mocht deze dus op straat komen te liggen, dan ben je heel misschien meer data kwijt dan alleen de enquêtes. Daarom kun je beter een specifiek account gebruiken dat alleen op de LimeSurvey database rechten heeft.

Een andere manier om config.php te beveiligen is deze te verplaatsen naar een locatie buiten de webroot, bijvoorbeeld (in het geval van Apache) in de directory boven /htdocs ( de map public_html of de map www). Je gebruikt dan config.php, maar plaatst één verwijzing erin naar het echte bestand. Een voorbeeld is <?php return include("/home/hostfolder/safedata/configreal.php"); ?>. Zet vervolgens in dat bestand de gehele configuratie uit config.php. Dit bestand moet dan niet in een web-map staan. Dan bevat /application/config/config.php geen database passwords, enz., alleen de bestandsnaam van het bestand met die gegevens.

Hiermee wordt voorkomen dat alle andere bestanden die include /application/config/config.php bevatten gewijzigd moeten worden, omdat config.php ' ze doorstuurt' naar een configuratie-bestand dat op een niet-webmap staat. Je moet wel configreal.php wijzigen door de volgende parameters te wijzigen in absolute paden:

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

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

Voorbeeld:

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

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

Gebruik ook niet de naam "admin" als de standaardgebruiker. Ga naar de MySQL database (of database die je voor LimeSurvey gebruikt) en wijzig de naam naar iets als "admin_xyz". Nu wordt het voor vreemden lastiger om te raden welke naam de beheerder heeft. Bedenk dat dit slechts één van de twee waarden is die iemand nodig heeft om binnen te komen: de andere is het wachtwoord. Kies deze twee dus met zorgvuldigheid.


Inhoudsbeveiligingsbeleid (CSP)

DISCLAIMER - De CSP die hier wordt gegeven, is slechts een voorbeeld en is niet bedoeld om letterlijk te worden gebruikt. Het is bedoeld als uitgangspunt en je MOET het aanpassen aan je behoeften en het grondig testen.

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