Руководство по безопасной установке
From LimeSurvey Manual
__ОГЛАВЛЕНИЕ__
Общее
LimeSurvey опирается на собственную систему безопасности, которая по-умолчанию активирована. Авторы данного программного обеспечения не несут никакой ответственности и не делают заявлений в отношении уместности или безопасности данной программы. Однако, мы подходим к вопросам безопасности довольно серьезно и быстро реагируем - если Вам известны проблемы в безопасности LimeSurvey, пожалуйста, дайте нам знать: info@limesurvey.org или заведите отчет об ошибке на нашем баг-трекере (пожалуйста, отметьте его как частный).
Web server restriction
If you use apache, LimeSurvey include different htaccess file for restriction. verify you alow included htaccess with AllowOverride
.
With other webserver or if you want to use AllowOverride None
: you must
- (option) disable access to all files in application, protected, framework and themes/*/views
- disable access to file uploade by user /upload/surveys/.*/fu_[a-z0-9]
- (option) disable access on executable file in upload directory
You can find a sample for nginx on our General Faq
Права на файлы в Linux
Если вы пользуетесь Linux сервером, то требуется настройка прав файлов для обеспечения безопасной установки LimeSurvey.
Основные сведения о правах на файлы в Linux/*nix
Операционная система Linux/*nix - многопользовательская. Это означает, что кроме Вашей учетной записи другие пользователи могут параллельно с Вами находиться в системе и Вам необходимо позаботиться о правах которые Вы даете на файлы для других пользователей.
При этом хочется отметить, что пользователь 'root' всегда сможет получить доступ к Вашим файлам (вне зависимости какие были выставлены права) т.к. это супер-администратор.
Web-сервер (на котором запущена LimeSurvey) обычно работает от учетной записи пользователя (user). В Linux, это обычно 'www','www-data' (в Debian/Ubuntu), 'apache' или 'nobody' пользователи. Однако, некоторые хостинг-компании используют системы (такие как suexec), которые запускают скрипты LimeSurvey от имени Вашего пользователя. Разумеется, пользователь от имени которого работает Web-сервер должен иметь право читать файлы LimeSurvey. В то же самое время лишь немногие каталоги должны быть доступны для записи Web-сервером.
Установка прав в управляемой системе Linux
Если Вы сами управляете Web-сервером и настраиваете операционную систему (Вы владелец физического сервера или арендатор виртуального сервера к которому у Вас есть 'root'-доступ), то Вам нужно следовать этим рекомендациям.
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.
Для корректной работы скрипта необходимо чтобы он имел возможность записи в некоторые директории:
- "/limesurvey/tmp" директория и все подкаталоги используются для импорта/выгрузки файлов и должны быть настроены для Чтения и Записи Вашим Web-сервером.
- Директория upload/ и все подкаталоги также должны быть настроены для Чтения и Записи Вашим Web-сервером, чтобы иметь возможность загружать картинки и media-файлы.
- Все остальные директории и файлы должны быть установлены в режим доступа Только чтение
$ 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
Настройка файловых разрешений на Web-сервере хостинга
Осуществить стандартную процедуру защиты Web-приложения в окружении хостинга довольно сложно, потому что окружения хостинга могут существенно отличаться.
Для корректной работы скрипта необходимо, чтобы он имел доступ на запись в следующие директории:
- "/limesurvey/tmp" директория и все подкаталоги используются для импорта/выгрузки файлов и должны быть настроены для Чтения и Записи Вашим Web-сервером.
- Директория upload/ и все подкаталоги также должны быть настроены для Чтения и Записи Вашим Web-сервером, чтобы иметь возможность загружать картинки и media-файлы.
- Все остальные директории и файлы должны быть установлены в режим доступа Только чтение
- В зависимости от конфигурации Вашего Web-сервера будет необходимо выдать права 755 или 777, чтобы сделать возможным запись туда сервером. Сначала попробуйте 755 - если не сработает, то обновите на 777.
- Вы также можете убрать доступ на чтение с файла config.php для всех остальных установив на него права 750 - если ничего не работает, то попробуйте выставить 755.
Права доступа к файлам в Windows
Если Вы используете Windows сервер, то необходимо убедиться, что каталог admin разрешен для записи процессом Web-сервера, при этом на все остальные файлы могут действовать разрешения только на чтение и выполнение.
Прочие вопросы безопасности
Ниже были приведены только рекомендации. Сама по себе LimeSurvey и так довольно безопасная система, даже без применения указанных мер. Однако, если Вы обрабатываете исключительно конфиденциальные данные, то безопасности никогда не бывает мало и следующее должно Вам помочь:
SSL usage
We generally recommend the usage of SSL for sensitive survey data. You usually enable SSL by configuring your web server correctly and using a SSQL certificate. If you have enabled SSL, you should enforce SSL all the time from the global settings of LimeSurvey. Additionally, you could only set to use 'secure' cookies by editing the respective option in config.php.
Доступ к config.php
/application/config/config.php - файл содержит имя пользователя и пароль к базе данных Вашего сервера. Вы рискуете заполучить определенные проблемы безопасности, если в данном файле указан пользователь с высоким уровнем административных прав к Вашей базе. В случае возникновения каких либо ошибок, содержимое данного файла может быть отображено на экране браузера, и конфиденциальные данные могут быть скомпрометированы(хотя, это маловероятный сценарий). Лучшим вариантом будет указать в данном файле пользователя, который имеет полномочия лишь внутри базы данных limesurvey.
Другим способом дополнительно обезопасить данную систему может быть расположение информации находящейся в файле /application/config/config.php не в Web-директории, т.е. для пользователя Apache эта директория будет находиться выше каталога htdocs (или public_html или www). Таким образом Вы сможете использовать config.php, но с одной единственной строкой в нем - которая подключает актуальную конфигурацию из внешнего источника (например: <?php return include("/home/hostfolder/safedata/configreal.php"); ?>). Удалите всю актуальную конфигурационную информацию из /application/config/config.php и вставьте ее в другой файл (configreal.php), который в свою очередь подключается в файле /application/config/config.php. Подключаемый файл не должен находиться в Web-директории. Таким образом непосредственно в самом файле /application/config/config.php больше не будут храниться конфиденциальные данные, а лишь имя файла, где это содержится на самом деле. Данная манипуляция позволяет избежать необходимости изменять все файлы, которые подключают /application/config/config.php. При этом, Вам необходимо будет отредактировать файл configreal.php и изменить в нем следующие параметры
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'),
[...]
);
чтобы использовать абсолютные пути к каталогам, чтобы все работало должным образом. Пример:
'basePath' => '/var/www/htdocs/limesurvey',
'runtimePath' => '/var/www/htdocs/limesurvey/tmp/runtime',
[...]
'urlManager' => array(
[...]
'rules' => require('/var/www/htdocs/limesurvey/config/routes.php'),
[...]
);
Также не используйте "admin" пользователем по-умолчанию. Отправляйтесь в Вашу MySQL базу данных (или другую, если Вы развернули LimeSurvey на какой либо другой базе) и измените имя пользователя по-умолчанию "admin" на какое угодно (например "admin_xyz"). Теперь подобрать имя пользователя администратора будет гораздо сложнее. Пароль администратора - это другая переменная. Выбирайте его с особой тщательностью.
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>