安装安全提示
From LimeSurvey Manual
概述
请注意,我们非常重视安全问题,并会快速响应。因此,如果您发现 LimeSurvey 中存在任何安全问题,请在我们的 缺陷跟踪系统 中提交缺陷报告告知我们(请将该缺陷的严重程度或类别标记为“security”)。
有关报告安全问题/漏洞的更多详细信息,请查阅我们的安全政策。
Web 服务器限制
如果您使用 Apache,LimeSurvey 包含用于访问限制的不同 htaccess 文件。请确认已通过 AllowOverride 允许使用所包含的 htaccess。
如果使用其他 Web 服务器,或者您希望使用 AllowOverride None,则必须:
- (可选)禁止访问 application、protected、framework 和 themes/*/views 中的所有文件
- 禁止访问用户上传的文件 /upload/surveys/.*/fu_[a-z0-9]
- (可选)禁止执行上传目录中的可执行文件
您可以在我们的常见问题解答中找到 nginx 的示例配置。
Linux 文件权限
如果您使用的是 Linux 服务器,则需要相应地设置文件权限,以保护您的 LimeSurvey 安装。
Linux/*nix 文件权限基础知识
Linux/*nix 操作系统是多用户系统。这意味着,除您的个人账户外,系统中还可能存在其他用户账户,因此您应当谨慎授予其他用户的权限。
请注意,“root”账户是超级管理员用户,无论您如何设置文件权限,它始终拥有访问您文件的权限。
运行 LimeSurvey 的 Web 服务器同样以特定身份(用户)运行。在 Linux 上,该用户通常是“www”、“www-data”(Debian/Ubuntu 上)、“apache”或“nobody”。不过,一些托管服务商使用的系统(如 suexec)可以让 LimeSurvey 脚本以您的个人用户身份运行。当然,Web 服务器用户必须有权读取 LimeSurvey 文件。但是,只有 LimeSurvey 的一小部分子目录需要允许 Web 服务器用户写入。
在自行管理的 Linux 系统上设置文件权限
如果您自行管理 Web 服务器和操作系统配置(您是物理服务器的所有者,或租用了拥有 root 权限的虚拟服务器),可以参考下面的建议。
您可以先设置 LimeSurvey 文件的所有者和用户组,以便简化文件权限的设置。一种可行的做法是:将 LimeSurvey 文件的所有者设置为您的个人用户名,将用户组设置为 Web 服务器所在的组。通常,该 Web 服务器组只包含 Web 服务器账户(可能还包括另一个网站管理员账户)。例如,如果您的用户名是“myaccount”,Web 服务器用户是“apache”组中的“apache”,则可以通过 shell 使用以下命令:$ chown -R myaccount:apache limesurvey/。随后,再设置文件和子目录的权限。
为使脚本正常运行,需要对某些目录具有写入权限:
- /limesurvey/application/config 目录需要“读取和写入”权限,以便保存应用程序配置设置
- /limesurvey/tmp 目录及其子目录用于导入/上传,应为您的 Web 服务器设置“读取和写入”权限
- upload/ 目录及其所有子目录也必须设置“读取和写入”权限,以便上传图片和媒体文件
- 所有其他目录和文件可以设置为“只读”
在托管 Web 服务器上设置文件权限
由于托管环境在许多方面各不相同,很难有一套标准流程来保护托管环境中的 Web 应用程序。
在托管服务器的情况下,为使脚本正常运行,服务器需要对某些目录具有写入权限:
- /limesurvey/tmp 目录用于导入/上传,应为您的 Web 服务器设置“读取和写入”权限
- upload/ 目录及其所有子目录也必须为您的 Web 服务器设置“读取和写入”权限,以便上传图片和媒体文件
- 其他目录和文件应设置为“只读”
- 根据 Web 服务器的配置,您可能需要将可写文件夹的权限通过 chmod 设置为 755 或 777,以便 Web 服务器可以写入。请先尝试 755,如果不起作用,再“升级”为 777
- 您也可以尝试将 config.php 的权限设置为 750,以移除其他用户对该文件的读取权限;如果不起作用,再“升级”为 755
Windows 文件权限
如果您使用的是 Windows 服务器,应确保 admin 文件夹允许 Web 服务器进程的所有者向该目录写入文件,其余文件可以设置为只读和执行。
其他安全问题
以下仅为建议。通常情况下,即使没有这些额外措施,LimeSurvey 也非常安全。但如果您收集的是极其敏感的资料,适当增加一些安全措施会有所帮助:
SSL的使用
对于敏感的调查数据,我们通常建议使用SSL。您通常可以通过正确配置Web服务器并使用SSL证书来启用SSL。如果已启用SSL,则应在LimeSurvey的全局设置中始终强制使用SSL。此外,您还可以通过编辑config.php中的相应选项,将其设置为仅使用“安全”Cookie。
访问config.php文件
/application/config/config.php文件包含数据库服务器的用户名和密码。这会带来一定的安全问题,尤其是当您使用的登录账户对数据库拥有高级别管理权限时。如果由于某些错误导致该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中删除所有实际的配置信息,并将其粘贴到/application/config/config.php文件中所引用的另一个文件(configreal.php)中。该文件应位于非Web目录中。这样,/application/config/config.php将不再包含数据库密码等信息,而只包含确实存有数据库信息的文件名。
这样就无需修改其他所有包含/application/config/config.php的文件,因为config.php会将它们“重定向”到位于非Web目录中、包含所有真实配置信息的配置文件。
此外,请不要使用“admin”或“administrator”作为默认用户。请进入您的MySQL数据库(或安装LimeSurvey所使用的数据库),将默认用户名“admin”改为您喜欢的任何名称(例如“admin_xyz”)。这样,猜出管理员的新用户名就会困难得多。请记住,这是入侵者获取访问权限可利用的两个变量之一,管理员密码则是另一个变量。因此,请务必非常谨慎地设置这两项。
内容安全策略(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>