Decas de segurança da isntalação
From LimeSurvey Manual
Geral
Observe que levamos as questões de segurança muito a sério e reagimos rapidamente. Portanto, se você souber de algum problema de segurança no LimeSurvey, avise-nos abrindo um relatório de erro em nosso rastreador de bugs (marque o bug com severidade ou categoria 'security').
Para mais detalhes, consulte nossa Política de segurança para relatar problemas/vulnerabilidades de segurança.
Restrição do servidor web
O LimeSurvey inclui arquivos .htaccess que bloqueiam o acesso web a arquivos e diretórios usados apenas no servidor. Se você usa Apache, verifique se esses arquivos são permitidos com AllowOverride All e se o mod_rewrite está ativado.
Outros servidores web, como nginx ou IIS, ignoram os arquivos .htaccess, assim como o Apache com AllowOverride None. Nesse caso, bloqueie o acesso web aos seguintes itens na configuração do seu servidor web:
- os diretórios application, vendor, docs, locale, modules e tmp/runtime
- os diretórios conf, core, doc, integration, lang, lib e tpl em assets/packages/kcfinder
- os arquivos setdebug.php e open-api-gen.php
- os arquivos de desenvolvimento no diretório raiz do 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 e SECURITY.md
- arquivos e diretórios ocultos (o nome começa com um ponto), exceto .well-known
- arquivos de log (*.log)
- arquivos carregados pelos participantes do questionário: os arquivos que começam com fu_ em upload/surveys e seus subdiretórios
Certifique-se também de que scripts no diretório de carregamento nunca possam ser executados, por exemplo scripts PHP, Perl, Python ou shell.
O pacote do LimeSurvey também contém documentação, exemplos e testes das bibliotecas incluídas, por exemplo nos diretórios vendor e docs. Não exclua esses arquivos: a próxima atualização os traz de volta. Em vez disso, bloqueie o acesso web aos diretórios, conforme descrito acima.
Você pode encontrar um exemplo para nginx na página Exemplo de configuração do nginx para o LimeSurvey.
Permissões de arquivos do Linux
Se você está usando um servidor Linux, é necessário definir as permissões de arquivo adequadamente para proteger a instalação do seu LimeSurvey.
Fatos básicos sobre a permissão de arquivos Linux/*nix
Um sistema Linux/*nix é multi-usuário. Isso significa que, além da sua conta pessoal, outras contas de usuário podem existir no seu sistema e você deverá cuidar quais permissões você dá aos outros usuários.
Lembre-se de que a conta 'root' sempre terá permissão para acessar seus arquivos (não importa quais permissões de arquivo você defina), pois é o usuário super-administrador.
O servidor web (que executa o LimeSurvey) também é executado sob uma determinada identidade (usuário). No Linux, geralmente é o usuário 'www', 'www-data' (no Debian/Ubuntu), 'apache' ou 'nobody'. No entanto, algumas empresas de hospedagem usam sistemas (como o suexec) que permitem executar scripts do LimeSurvey com o seu usuário pessoal. Naturalmente, o usuário do servidor web deve ter direito de leitura sobre os arquivos do LimeSurvey. No entanto, apenas um pequeno subconjunto de subdiretórios do LimeSurvey precisa ter permissão de escrita para o usuário do servidor web.
Definindo permissões de arquivo em um sistema Linux autogerenciado
Se você gerencia a configuração do seu servidor web e do sistema operacional (você é o proprietário do servidor físico ou aluga um servidor virtual no qual tem acesso root), considere as recomendações abaixo.
Primeiro, você pode definir o proprietário e o grupo dos arquivos do LimeSurvey para facilitar a configuração das permissões de arquivo. Uma estratégia possível é definir o proprietário dos arquivos do LimeSurvey como o seu nome de usuário pessoal e o grupo dos arquivos como o grupo do servidor web. Normalmente, esse grupo contém apenas a conta do servidor web (e possivelmente outra conta de webmaster). Por exemplo, se o seu nome de usuário é 'myaccount' e o usuário do servidor web é 'apache', no grupo 'apache', então, em um acesso shell, você pode usar o seguinte comando: $ chown -R myaccount:apache limesurvey/. Em seguida, defina as permissões dos arquivos e subdiretórios.
Para que o script funcione corretamente, é necessário acesso de escrita a alguns diretórios:
- O diretório /limesurvey/application/config requer Leitura e escrita para salvar as configurações do aplicativo
- O diretório /limesurvey/tmp e seus subdiretórios são usados para importações/carregamentos e devem ser definidos como Leitura e escrita para o seu servidor web
- O diretório upload/ e todos os seus subdiretórios também devem ter permissões de Leitura e escrita para permitir o carregamento de imagens e arquivos de mídia
- Todos os outros diretórios e arquivos podem ser definidos como Somente leitura
Definindo permissões de arquivo em um servidor web hospedado
Dada a dificuldade de um procedimento padrão para proteger um aplicativo web em um ambiente hospedado, a tarefa é complicada, pois os ambientes hospedados diferem de várias maneiras.
No caso de um servidor gerenciado, o servidor precisa de acesso de escrita a alguns diretórios para que o script funcione corretamente:
- O diretório /limesurvey/tmp é usado para importações/carregamentos e deve ser definido como Leitura e escrita para o seu servidor web
- O diretório upload/ e todos os seus subdiretórios também devem ter Leitura e escrita para o seu servidor web, a fim de permitir o carregamento de imagens e arquivos de mídia
- Os outros diretórios e arquivos devem ser definidos como Somente leitura
- Dependendo da configuração do seu servidor web, você terá que alterar as permissões (chmod) das pastas graváveis para 755 ou 777 para que o servidor web possa escrever nelas. Tente 755 primeiro; se não funcionar, 'suba' para 777
- Você também pode tentar remover o acesso de leitura de outros usuários ao config.php definindo as permissões desse arquivo como 750 - se não funcionar, 'suba' para 755
Permissões de arquivo no Windows
Se você está usando um servidor Windows, deve garantir que a pasta admin permita que o proprietário do processo do servidor web grave arquivos nesse diretório. O restante dos arquivos pode ser definido como somente leitura e execução.
Outras questões de segurança
As recomendações a seguir são apenas sugestões. De modo geral, o LimeSurvey é muito seguro sem essas medidas adicionais. No entanto, se você coleta dados extremamente sensíveis, um pouco de segurança adicional pode ajudar:
Uso de SSL
Recomendamos, em geral, o uso de SSL para dados sensíveis de inquéritos. Normalmente, você ativa o SSL configurando corretamente o seu servidor web e usando um certificado SSL. Se você ativou o SSL, deve forçar o uso de SSL o tempo todo nas Definições globais do LimeSurvey. Além disso, você pode configurar o uso de cookies 'seguros' editando a opção correspondente no config.php.
Acesso ao arquivo config.php
O arquivo /application/config/config.php contém um nome de usuário e uma senha do seu servidor de banco de dados. Isso gera certos problemas de segurança, principalmente se você estiver usando uma conta de acesso com privilégios administrativos elevados no banco de dados. Caso algum erro retorne o conteúdo desse arquivo PHP ao navegador de um usuário, a senha do banco de dados e outros detalhes poderiam ser comprometidos (no entanto, este é um cenário muito improvável). A melhor maneira de minimizar o risco é criar uma conta de acesso específica, com direitos apenas sobre o banco de dados do seu LimeSurvey.
Outra forma de proteger essas informações é colocar o conteúdo do arquivo /application/config/config.php em um diretório não web, ou seja, para usuários de Apache, o diretório acima da pasta htdocs (também conhecida como public_html ou www). Basicamente, você continuará usando o config.php, mas com apenas uma linha nele - uma linha que inclui o arquivo com as informações REAIS de configuração (ex.: <?php return include("/home/hostfolder/safedata/configreal.php"); ?>). Remova todas as informações reais de configuração de /application/config/config.php e cole-as no outro arquivo (configreal.php) mencionado no arquivo /application/config/config.php. Esse outro arquivo deve estar localizado em um diretório não web. Assim, o /application/config/config.php não conterá senhas de banco de dados etc. - apenas o nome do arquivo que CONTÉM as informações do banco de dados.
Isso evita ter que alterar todos os outros arquivos que incluem /application/config/config.php, já que o config.php 'redireciona' esses arquivos para o arquivo de configuração localizado em um diretório não web, que contém todas as informações reais de configuração.
Além disso, não use "admin" ou "administrator" como usuário padrão. Acesse seu banco de dados MySQL (ou aquele em que você instalou o LimeSurvey) e altere o nome de usuário padrão "admin" para o que preferir (por exemplo, "admin_xyz"). Assim, ficará muito mais difícil adivinhar o novo nome de usuário do administrador. Lembre-se de que essa é uma das duas variáveis que invasores podem usar para obter acesso. A senha do administrador é a outra variável. Portanto, escolha ambas com extremo cuidado.
Content Security Policy (CSP)
AVISO LEGAL - A CSP fornecida aqui é apenas um exemplo e não deve ser usada ao pé da letra. Ela serve como ponto de partida e você DEVE adaptá-la às suas necessidades e testá-la minuciosamente.
<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>