Savjeti za sigurnost instalacije
From LimeSurvey Manual
Općenito
Imajte na umu da sigurnosna pitanja shvaćamo vrlo ozbiljno i brzo reagiramo. Stoga, ako znate za bilo kakve sigurnosne probleme u LimeSurveyju, javite nam to otvaranjem prijave pogreške u našem praćenju pogrešaka (označite pogrešku kao ozbiljnost ili kategoriju 'security').
Za više detalja pogledajte našu sigurnosnu politiku o prijavi sigurnosnih problema/ranjivosti.
Ograničenja web poslužitelja
Ako koristite Apache, LimeSurvey uključuje različite htaccess datoteke za ograničavanje pristupa. Provjerite da ste putem AllowOverride omogućili korištenje uključenih htaccess datoteka.
Kod drugog web poslužitelja ili ako želite koristiti AllowOverride None, morate:
- (opcija) onemogućiti pristup svim datotekama u application, protected, framework i themes/*/views
- onemogućiti pristup datotekama koje je učitao korisnik u /upload/surveys/.*/fu_[a-z0-9]
- (opcija) onemogućiti izvršavanje izvršnih datoteka u direktoriju upload
Primjer za nginx možete pronaći u našim Općim čestim pitanjima
Dozvole za datoteke na Linuxu
Ako koristite Linux poslužitelj, za zaštitu vaše LimeSurvey instalacije potrebno je ispravno postaviti dozvole za datoteke.
Osnovne činjenice o dozvolama za datoteke na Linuxu/*nixu
Operativni sustav Linux/*nix je višekorisnički. To znači da osim vašeg osobnog računa u sustavu mogu postojati i drugi korisnički računi te biste trebali paziti koje dozvole dajete drugim korisnicima.
Imajte na umu da će račun 'root' uvijek imati dozvolu pristupa vašim datotekama (bez obzira na postavljene dozvole za datoteke) jer je to korisnik s najvišim ovlastima.
Web poslužitelj (koji pokreće LimeSurvey) također radi pod određenim identitetom (korisnikom). Na Linuxu je to obično korisnik 'www', 'www-data' (na Debianu/Ubuntuu), 'apache' ili 'nobody'. Međutim, neke hosting tvrtke koriste sustave (poput suexec) koji omogućuju pokretanje LimeSurvey skripti pod vašim osobnim korisnikom. Naravno, korisnik web poslužitelja mora imati pravo čitanja LimeSurvey datoteka. No, samo mali podskup LimeSurvey poddirektorija mora biti zapisiv za korisnika web poslužitelja.
Postavljanje dozvola za datoteke na samostalno upravljanom Linux sustavu
Ako sami upravljate konfiguracijom web poslužitelja i operativnog sustava (vlasnik ste fizičkog poslužitelja ili unajmljujete virtualni poslužitelj na kojem imate root pristup), razmotrite preporuke u nastavku.
Najprije možete postaviti vlasnika i grupu svojih LimeSurvey datoteka kako biste olakšali postavljanje dozvola. Moguća strategija je postaviti vlasnika LimeSurvey datoteka na svoje osobno korisničko ime, a grupu LimeSurvey datoteka na grupu web poslužitelja. Obično ta grupa web poslužitelja sadrži samo račun web poslužitelja (i eventualno još jedan račun webmastera). Na primjer, ako je vaše korisničko ime 'myaccount', a korisnik web poslužitelja je 'apache' u grupi 'apache', tada putem shell pristupa možete koristiti sljedeću naredbu: $ chown -R myaccount:apache limesurvey/. Zatim postavite dozvole za datoteke i poddirektorije.
Da bi skripta ispravno radila, potreban je pristup pisanju u nekim direktorijima:
- Direktorij /limesurvey/application/config zahtijeva Čitanje i pisanje radi spremanja konfiguracijskih postavki aplikacije
- Direktorij /limesurvey/tmp i njegovi poddirektoriji koriste se za uvoz/učitavanje te bi za vaš web poslužitelj trebali biti postavljeni na Čitanje i pisanje
- Direktorij upload/ i svi njegovi poddirektoriji također moraju imati dozvole Čitanje i pisanje kako bi se omogućilo učitavanje slika i medijskih datoteka
- Svi ostali direktoriji i datoteke mogu se postaviti na Samo čitanje
Postavljanje dozvola za datoteke na web poslužitelju kod pružatelja usluge hostinga
S obzirom na to da standardni postupak za zaštitu web aplikacije u hosting okruženju teško postoji, to je prilično zahtjevno jer se hosting okruženja razlikuju na mnogo načina.
U slučaju upravljanog poslužitelja, poslužitelju je potreban pristup pisanju u nekim direktorijima kako bi skripta ispravno radila:
- Direktorij /limesurvey/tmp koristi se za uvoz/učitavanje i za vaš web poslužitelj treba biti postavljen na Čitanje i pisanje
- Direktorij upload/ i svi njegovi poddirektoriji također moraju imati Čitanje i pisanje za vaš web poslužitelj kako bi se omogućilo učitavanje slika i medijskih datoteka
- Ostali direktoriji i datoteke trebaju biti postavljeni na Samo čitanje
- Ovisno o konfiguraciji vašeg web poslužitelja, morat ćete naredbom chmod postaviti prava na zapisivim mapama na 755 ili 777 kako bi bile zapisive za web poslužitelj. Prvo pokušajte s 755, a ako ne radi, 'nadogradite' na 777
- Možete pokušati i ukloniti pravo čitanja drugim korisnicima za config.php postavljanjem dozvola te datoteke na 750 - ako ne radi, 'nadogradite' na 755
Dozvole za datoteke na Windowsima
Ako koristite Windows poslužitelj, trebali biste osigurati da mapa admin dopušta vlasniku procesa web poslužitelja pisanje datoteka u taj direktorij. Ostale datoteke mogu se postaviti na samo čitanje i izvršavanje.
Ostala sigurnosna pitanja
Sljedeće su samo preporuke. LimeSurvey je općenito vrlo siguran i bez ovih dodatnih mjera. Ako ipak prikupljate izrazito osjetljive podatke, malo dodatne sigurnosti može pomoći:
Korištenje SSL-a
Općenito preporučujemo korištenje SSL-a za osjetljive podatke upitnika. SSL obično omogućujete ispravnom konfiguracijom web poslužitelja i korištenjem SSL certifikata. Ako ste omogućili SSL, trebali biste ga uvijek nametnuti u globalnim postavkama LimeSurveya. Dodatno, možete postaviti korištenje 'sigurnih' kolačića uređivanjem odgovarajuće opcije u config.php.
Pristup datoteci config.php
Datoteka /application/config/config.php sadrži korisničko ime i zaporku za vaš poslužitelj baze podataka. To predstavlja određene sigurnosne rizike, osobito ako koristite prijavu s visokom razinom administratorskog pristupa vašoj bazi podataka. U slučaju pogreške koja bi sadržaj ove PHP datoteke vratila u korisnikov preglednik, zaporka vaše baze podataka i drugi detalji mogli bi biti ugroženi (međutim, to je vrlo malo vjerojatan scenarij). Najbolji način za smanjenje rizika je postavljanje posebne prijave koja ima posebna prava isključivo nad vašom LimeSurvey bazom podataka.
Drugi način zaštite ovih informacija je da podatke iz datoteke /application/config/config.php smjestite u direktorij izvan weba, tj. za korisnike Apachea to je direktorij iznad mape htdocs (poznate i kao public_html ili www). U osnovi ćete i dalje koristiti config.php, ali s jednim retkom u njemu - retkom koji uključuje datoteku sa STVARNIM konfiguracijskim podacima (npr.: <?php return include("/home/hostfolder/safedata/configreal.php"); ?>). Uklonite sve stvarne konfiguracijske podatke iz /application/config/config.php i zalijepite ih u drugu datoteku (configreal.php) koja je navedena u datoteci /application/config/config.php. Ta se druga datoteka treba nalaziti u direktoriju izvan weba. Tada /application/config/config.php neće sadržavati zaporke baze podataka itd. - samo naziv datoteke koja SADRŽI podatke o bazi podataka.
Time se izbjegava potreba za izmjenom svih ostalih datoteka koje uključuju /application/config/config.php, jer ih config.php 'preusmjerava' na konfiguracijsku datoteku koja se nalazi u direktoriju izvan weba i koja sadrži sve stvarne konfiguracijske podatke.
Također, nemojte koristiti "admin" ili "administrator" kao zadanog korisnika. Otvorite svoju MySQL bazu podataka (ili onu u kojoj ste instalirali LimeSurvey) i promijenite zadano korisničko ime "admin" u što god želite (npr. "admin_xyz"). Sada će biti puno teže pogoditi novo korisničko ime administratora. Zapamtite, ovo je jedna od dvije varijable koje uljezi mogu iskoristiti za dobivanje pristupa. Zaporka administratora druga je varijabla. Zato obje birajte iznimno pažljivo.
Content Security Policy (CSP)
ODRICANJE OD ODGOVORNOSTI - CSP naveden ovdje samo je primjer i nije namijenjen doslovnoj uporabi. Služi kao polazišna točka i MORATE ga prilagoditi svojim potrebama te ga temeljito testirati.
<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>