Руководство по безопасной установке
From LimeSurvey Manual
__ОГЛАВЛЕНИЕ__
Общее
Обратите внимание: мы очень серьёзно относимся к вопросам безопасности и быстро на них реагируем. Поэтому, если вам известны какие-либо проблемы безопасности в LimeSurvey, сообщите нам о них, создав отчёт об ошибке в нашем баг-трекере (пожалуйста, укажите для ошибки серьёзность или категорию «security»).
Подробнее об отправке сообщений о проблемах безопасности и уязвимостях см. в нашей политике безопасности.
Ограничение доступа на веб-сервере
LimeSurvey включает файлы .htaccess, которые блокируют веб-доступ к файлам и каталогам, используемым только на сервере. Если вы используете Apache, убедитесь, что эти файлы разрешены с помощью директивы AllowOverride All и что включён модуль mod_rewrite.
Другие веб-серверы, такие как nginx или IIS, игнорируют файлы .htaccess, так же как и Apache с директивой AllowOverride None. В этом случае в конфигурации веб-сервера закройте веб-доступ к следующим объектам:
- каталоги application, vendor, docs, locale, modules и tmp/runtime
- каталоги conf, core, doc, integration, lang, lib и tpl в assets/packages/kcfinder
- файлы setdebug.php и open-api-gen.php
- файлы разработки в корневом каталоге LimeSurvey: composer.json, composer.lock, package.json, yarn.lock, gulpfile.js, phpunit.xml, psalm*.xml, phpci.yml, phpcs.ruleset.xml, publiccode.yml, manifest.yml, CONTRIBUTING.md, README.md и SECURITY.md
- скрытые файлы и каталоги (их имя начинается с точки), кроме .well-known
- файлы журналов (*.log)
- файлы, загруженные участниками опроса: файлы, имена которых начинаются с fu_, в upload/surveys и её подкаталогах
Также убедитесь, что скрипты в каталоге upload никогда не могут быть выполнены, например скрипты PHP, Perl, Python или shell.
Пакет LimeSurvey также содержит документацию, примеры и тесты для входящих в него библиотек, например в каталогах vendor и docs. Не удаляйте эти файлы: следующее обновление вернёт их обратно. Вместо этого закройте веб-доступ к этим каталогам, как описано выше.
Пример конфигурации для nginx можно найти на странице Пример конфигурации LimeSurvey для nginx.
Права на файлы в Linux
Если вы используете сервер на Linux, для защиты установки LimeSurvey необходимо соответствующим образом настроить права доступа к файлам.
Основные сведения о правах на файлы в Linux/*nix
Операционная система Linux/*nix - многопользовательская. Это означает, что кроме Вашей учетной записи другие пользователи могут параллельно с Вами находиться в системе и Вам необходимо позаботиться о правах которые Вы даете на файлы для других пользователей.
Помните, что учётной записи «root» всегда будет предоставлен доступ к вашим файлам (независимо от установленных прав), так как это суперадминистратор.
Веб-сервер, на котором работает LimeSurvey, также запускается от имени определённого пользователя. В Linux это обычно пользователь «www», «www-data» (в Debian/Ubuntu), «apache» или «nobody». Однако некоторые хостинг-компании используют системы (например, suexec), позволяющие запускать скрипты LimeSurvey от имени вашего личного пользователя. Разумеется, пользователь веб-сервера должен иметь право читать файлы LimeSurvey. При этом лишь небольшая часть подкаталогов LimeSurvey должна быть доступна для записи пользователю веб-сервера.
Установка прав в управляемой системе Linux
Если вы сами управляете конфигурацией веб-сервера и операционной системы (вы владелец физического сервера или арендуете виртуальный сервер с доступом root), воспользуйтесь рекомендациями ниже.
Сначала можно задать владельца и группу файлов LimeSurvey, чтобы упростить настройку прав доступа. Один из возможных вариантов — назначить владельцем файлов LimeSurvey ваше личное имя пользователя, а группой — группу веб-сервера. Обычно эта группа содержит только учётную запись веб-сервера (и, возможно, ещё одну учётную запись веб-мастера). Например, если ваше имя пользователя — «myaccount», а пользователь веб-сервера — «apache» из группы «apache», то в командной оболочке можно выполнить следующую команду: $ chown -R myaccount:apache limesurvey/. После этого настройте права доступа к файлам и подкаталогам.
Для корректной работы скрипта необходим доступ на запись в некоторые каталоги:
- каталогу /limesurvey/application/config требуются права Чтение и запись для сохранения настроек конфигурации приложения;
- каталог /limesurvey/tmp и его подкаталоги используются для импорта и загрузки файлов, поэтому для вашего веб-сервера им следует задать права Чтение и запись;
- каталог upload/ и все его подкаталоги также должны иметь права Чтение и запись, чтобы можно было загружать изображения и медиафайлы;
- всем остальным каталогам и файлам можно задать права Только чтение.
Настройка прав доступа к файлам на хостинге
Единую процедуру защиты веб-приложения в среде хостинга описать сложно, так как такие среды существенно различаются.
В случае управляемого сервера для корректной работы скрипта серверу нужен доступ на запись в некоторые каталоги:
- каталог /limesurvey/tmp используется для импорта и загрузки файлов, поэтому для вашего веб-сервера ему следует задать права Чтение и запись;
- каталог upload/ и все его подкаталоги также должны иметь для вашего веб-сервера права Чтение и запись, чтобы можно было загружать изображения и медиафайлы;
- остальным каталогам и файлам следует задать права Только чтение.
- В зависимости от конфигурации веб-сервера для каталогов, доступных для записи, потребуется выполнить chmod с правами 755 или 777, чтобы веб-сервер мог в них писать. Сначала попробуйте 755, если не сработает — «повысьте» до 777.
- Вы также можете попробовать закрыть чтение файла config.php для других пользователей, задав для него права 750; если не сработает — «повысьте» до 755.
Права доступа к файлам в Windows
Если вы используете сервер на Windows, убедитесь, что каталог admin позволяет владельцу процесса веб-сервера записывать в него файлы. Остальным файлам можно задать права только на чтение и выполнение.
Прочие вопросы безопасности
Всё перечисленное ниже носит лишь рекомендательный характер. В целом LimeSurvey очень безопасна и без этих дополнительных мер. Однако если вы собираете крайне конфиденциальные данные, небольшая дополнительная защита не помешает:
Использование SSL
Мы рекомендуем использовать SSL для защиты конфиденциальных данных опросов. Обычно SSL включается путём правильной настройки веб-сервера и использования SSL-сертификата. Если SSL включён, следует принудительно использовать SSL во всех случаях в общих настройках LimeSurvey. Кроме того, можно включить использование только «защищённых» (secure) cookie, изменив соответствующий параметр в config.php.
Доступ к файлу config.php
Файл /application/config/config.php содержит имя пользователя и пароль для сервера базы данных. Это создаёт определённые риски для безопасности, особенно если используется учётная запись с высоким уровнем административного доступа к базе данных. Если из-за какой-либо ошибки содержимое этого PHP-файла будет передано в браузер пользователя, пароль базы данных и другие сведения могут быть скомпрометированы (однако такой сценарий крайне маловероятен). Лучший способ снизить риск — создать отдельную учётную запись с правами только на базу данных LimeSurvey.
Другой способ защитить эти данные — вынести информацию из файла /application/config/config.php в каталог вне веб-пространства, то есть для пользователей 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. Этот файл должен находиться в каталоге вне веб-пространства. Тогда /application/config/config.php не будет содержать пароли базы данных и прочее — только имя файла, который их СОДЕРЖИТ.
Это избавляет от необходимости изменять все остальные файлы, подключающие /application/config/config.php, поскольку config.php «перенаправляет» их к файлу конфигурации, расположенному вне веб-пространства, в котором содержится вся реальная конфигурация.
Кроме того, не используйте «admin» или «administrator» в качестве пользователя по умолчанию. Откройте вашу базу данных MySQL (или ту, в которую вы установили LimeSurvey) и измените имя пользователя по умолчанию «admin» на любое другое (например, «admin_xyz»). Теперь угадать новое имя пользователя администратора будет гораздо сложнее. Помните, это одна из двух переменных, которые злоумышленники могут использовать для получения доступа. Пароль администратора — вторая переменная. Поэтому выбирайте их обе с максимальной осторожностью.
Content Security Policy (CSP)
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ — приведённая здесь политика CSP является лишь примером и не предназначена для использования без изменений. Это отправная точка: вы ОБЯЗАНЫ адаптировать её под свои потребности и тщательно протестировать.
<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>