Bezpečnostní tipy pro instalaci
From LimeSurvey Manual
Obecné informace
Upozorňujeme, že bezpečnostní problémy bereme velmi vážně a rychle na ně reagujeme. Pokud tedy víte o jakémkoli bezpečnostním problému v LimeSurvey, dejte nám prosím vědět vytvořením hlášení chyby v našem systému pro sledování chyb (označte prosím chybu závažností nebo kategorií „security“).
Další podrobnosti o hlášení bezpečnostních problémů a zranitelností naleznete v našich zásadách zabezpečení.
Omezení přístupu na webovém serveru
Pokud používáte Apache, LimeSurvey obsahuje několik souborů htaccess pro omezení přístupu. Ověřte, že máte pomocí AllowOverride povoleno použití přibalených souborů htaccess.
U jiného webového serveru nebo pokud chcete použít AllowOverride None musíte:
- (volitelně) zakázat přístup ke všem souborům v adresářích application, protected, framework a themes/*/views
- zakázat přístup k souborům nahraným uživateli v /upload/surveys/.*/fu_[a-z0-9]
- (volitelně) zakázat přístup ke spustitelným souborům v adresáři upload
Ukázku konfigurace pro nginx najdete v našich Často kladených otázkách
Oprávnění k souborům v systému Linux
Pokud používáte server s Linuxem, je pro zabezpečení vaší instalace LimeSurvey nutné správně nastavit oprávnění k souborům.
Základní informace o oprávněních k souborům v systémech Linux/*nix
Operační systém Linux/*nix je víceuživatelský. To znamená, že kromě vašeho osobního účtu mohou v systému existovat i další uživatelské účty a měli byste dbát na to, jaká oprávnění ostatním uživatelům udělujete.
Mějte na paměti, že účet „root“ má vždy oprávnění k přístupu k vašim souborům (bez ohledu na to, jaká oprávnění nastavíte), protože je to uživatel se správcovskými právy.
Webový server (na kterém běží LimeSurvey) také běží pod určitou identitou (uživatelem). V systému Linux je to obvykle uživatel „www“, „www-data“ (v Debianu/Ubuntu), „apache“ nebo „nobody“. Někteří poskytovatelé hostingu však používají systémy (například suexec), které umožňují spouštět skripty LimeSurvey pod vaším osobním uživatelem. Uživatel webového serveru samozřejmě musí mít právo číst soubory LimeSurvey. Zapisovat však musí moci pouze malá část podadresářů LimeSurvey.
Nastavení oprávnění k souborům na vlastním spravovaném systému Linux
Pokud spravujete konfiguraci webového serveru a operačního systému sami (jste vlastníkem fyzického serveru nebo si pronajímáte virtuální server, ke kterému máte přístup root), můžete zvážit následující doporučení.
Nejprve můžete nastavit vlastníka a skupinu souborů LimeSurvey, aby bylo nastavení oprávnění snazší. Možnou strategií je nastavit vlastníka souborů LimeSurvey na vaše osobní uživatelské jméno a skupinu souborů LimeSurvey na skupinu webového serveru. Tato skupina webového serveru obvykle obsahuje pouze účet webového serveru (a případně další účet webmastera). Pokud je například vaše uživatelské jméno „myaccount“ a uživatel webového serveru je „apache“ ve skupině „apache“, můžete z příkazového řádku použít následující příkaz: $ chown -R myaccount:apache limesurvey/. Poté nastavte oprávnění k souborům a podadresářům.
Aby skript fungoval správně, je potřeba přístup pro zápis do některých adresářů:
- Adresář /limesurvey/application/config vyžaduje oprávnění Čtení a zápis pro ukládání nastavení konfigurace aplikace
- Adresář /limesurvey/tmp a jeho podadresáře se používají pro import a nahrávání a pro váš webový server by měly mít nastaveno Čtení a zápis
- Adresář upload a všechny jeho podadresáře musí mít rovněž nastaveno oprávnění Čtení a zápis, aby bylo možné nahrávat obrázky a mediální soubory
- Všechny ostatní adresáře a soubory mohou být nastaveny jako Pouze pro čtení
Nastavení oprávnění k souborům na hostovaném webovém serveru
Standardní postup zabezpečení webové aplikace v hostovaném prostředí je obtížné popsat, protože se hostovaná prostředí v mnoha ohledech liší.
V případě spravovaného serveru potřebuje server pro správnou funkci skriptu přístup pro zápis do některých adresářů:
- Adresář /limesurvey/tmp se používá pro import a nahrávání a pro váš webový server by měl mít nastaveno Čtení a zápis
- Adresář upload a všechny jeho podadresáře musí mít pro váš webový server rovněž nastaveno Čtení a zápis, aby bylo možné nahrávat obrázky a mediální soubory
- Ostatní adresáře a soubory by měly být nastaveny jako Pouze pro čtení
- V závislosti na konfiguraci vašeho webového serveru budete muset u složek určených k zápisu nastavit pomocí chmod oprávnění 755 nebo 777, aby do nich mohl webový server zapisovat. Nejprve vyzkoušejte 755, pokud to nefunguje, „povyšte“ na 777
- Můžete také zkusit odebrat ostatním uživatelům oprávnění ke čtení souboru config.php nastavením oprávnění tohoto souboru na 750 – pokud to nefunguje, „povyšte“ na 755
Oprávnění k souborům v systému Windows
Pokud používáte server s Windows, měli byste zajistit, aby složka admin umožňovala vlastníkovi procesu webového serveru zapisovat do tohoto adresáře soubory. Ostatní soubory mohou být nastaveny pouze pro čtení a spouštění.
Další bezpečnostní otázky
Následující body jsou pouze doporučení. LimeSurvey je obecně velmi bezpečný i bez těchto dodatečných opatření. Pokud však shromažďujete extrémně citlivá data, může pomoci trochu větší zabezpečení:
Používání SSL
Pro citlivá data z průzkumů obecně doporučujeme používat SSL. SSL obvykle zapnete správnou konfigurací webového serveru a použitím SSL certifikátu. Pokud jste SSL zapnuli, měli byste v globálním nastavení LimeSurvey vynutit používání SSL po celou dobu. Navíc můžete nastavit používání „zabezpečených“ (secure) cookies úpravou příslušné volby v souboru config.php.
Přístup k souboru config.php
Soubor /application/config/config.php obsahuje uživatelské jméno a heslo k vašemu databázovému serveru. To představuje určitá bezpečnostní rizika, zejména pokud používáte přihlašovací účet s vysokou úrovní administrátorského přístupu k databázi. Pokud by v důsledku nějaké chyby byl obsah tohoto souboru PHP odeslán do prohlížeče uživatele, mohlo by dojít k vyzrazení hesla k databázi a dalších podrobností (jde však o velmi nepravděpodobný scénář). Nejlepším způsobem, jak riziko minimalizovat, je vytvořit speciální přihlašovací účet, který má oprávnění pouze k databázi LimeSurvey.
Dalším způsobem, jak tyto informace zabezpečit, je přesunout informace ze souboru /application/config/config.php do adresáře mimo web, tj. pro uživatele Apache do adresáře nad složkou htdocs (známou také jako public_html nebo www). V souboru config.php pak ponecháte pouze jeden řádek, který načítá soubor se SKUTEČNÝMI konfiguračními informacemi (např.: <?php return include("/home/hostfolder/safedata/configreal.php"); ?>). Odstraňte veškeré skutečné konfigurační informace ze souboru /application/config/config.php a vložte je do druhého souboru (configreal.php), který je uveden v souboru /application/config/config.php. Tento druhý soubor by měl být umístěn v adresáři mimo web. Soubor /application/config/config.php pak nebude obsahovat hesla k databázi apod. - pouze název souboru, který tyto informace o databázi OBSAHUJE.
Díky tomu není nutné měnit žádné další soubory, které načítají /application/config/config.php, protože config.php je 'přesměruje' na konfigurační soubor umístěný v adresáři mimo web, který obsahuje všechny skutečné konfigurační informace.
Také nepoužívejte jako výchozí uživatelské jméno "admin" ani "administrator". Přejděte do své databáze MySQL (nebo do té, do které jste LimeSurvey nainstalovali) a změňte výchozí uživatelské jméno "admin" na libovolné jiné (např. "admin_xyz"). Nové uživatelské jméno administrátora bude mnohem obtížnější odhadnout. Pamatujte, že je to jedna ze dvou proměnných, které mohou útočníci využít k získání přístupu. Druhou proměnnou je heslo administrátora. Obě proto volte s maximální opatrností.
Content Security Policy (CSP)
UPOZORNĚNÍ - Zde uvedená CSP je pouze příklad a není určena k doslovnému použití. Slouží jako výchozí bod a MUSÍTE ji přizpůsobit svým potřebám a důkladně ji otestovat.
<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>