x

主要章節

  1. LimeSurvey Cloud 與 LimeSurvey CE 的差異
  2. 快速入門指南 - LimeSurvey 3.0+
  3. 安裝 - LimeSurvey CE
  4. 如何設計一份好的問卷(指南)
  5. 入門指南
  6. 管理 LimeSurvey
  7. 問卷 - 簡介
  8. 問卷設定
  9. 問卷選單
  10. 問卷結構
  11. 問題簡介
  12. 題組 - 簡介
  13. 問卷管理
  14. 問卷工具列選項
  15. 多語言問卷
  16. ExpressionScript 引擎 - 快速入門指南
  17. 未分類及進階功能
  18. 常見問題
  19. 疑難排解
  20. 應變方案
  21. 授權條款
  22. 版本更改紀錄檔
  23. 外掛程式
 Actions

安裝安全性提示

From LimeSurvey Manual

本頁面可能為機器翻譯,可能包含錯誤。 檢視英文原文 · 改善此翻譯
This page is a translated version of the page Installation security hints and the translation is 100% complete.

一般資訊

請注意,我們非常重視安全性問題,並會迅速回應。因此,如果您發現 LimeSurvey 存在任何安全性問題,請在我們的 錯誤追蹤系統 中提交錯誤報告告知我們(請將該錯誤的嚴重性或類別標記為「security」)。

有關回報安全性問題/漏洞的詳細資訊,請參閱我們的 安全政策。

網頁伺服器限制

如果您使用 Apache,LimeSurvey 內含用於限制存取的不同 htaccess 檔案。請確認您已透過 AllowOverride 允許使用所包含的 htaccess。

若使用其他網頁伺服器,或您想使用 AllowOverride None:您必須

  • (選用)停用對 application、protected、framework 以及 themes/*/views 中所有檔案的存取
  • 停用對使用者上傳檔案 /upload/surveys/.*/fu_[a-z0-9] 的存取
  • (選用)停用對上傳目錄中可執行檔案的存取

您可以在我們的 常見問題 中找到 nginx 的範例

Linux 檔案權限

如果您使用 Linux 伺服器,必須相應地設定檔案權限,以確保 LimeSurvey 安裝的安全。

Linux/*nix 檔案權限的基本概念

Linux/*nix 作業系統是多使用者系統。這表示除了您個人的帳號之外,系統上還可能存在其他使用者帳號,因此您應注意授予其他使用者哪些權限。

提示:設定檔案權限對於保護存放密碼等重要資料的設定檔尤其重要。

請記住,「root」帳號因為是超級管理員使用者,無論您如何設定檔案權限,永遠都有權存取您的檔案。

網頁伺服器(執行 LimeSurvey 的程式)同樣以特定身分(使用者)執行。在 Linux 上,通常是「www」、「www-data」(Debian/Ubuntu)、「apache」或「nobody」使用者。不過,部分主機代管公司使用的系統(例如 suexec)可讓 LimeSurvey 指令碼以您的個人使用者身分執行。當然,網頁伺服器使用者必須具有讀取 LimeSurvey 檔案的權限。然而,只有少數 LimeSurvey 子目錄需要讓網頁伺服器使用者具有寫入權限。

提示:對於不需要寫入權限的 LimeSurvey 子目錄,撤銷網頁伺服器使用者的寫入權限非常有價值。事實上,即使發現了 LimeSurvey 的漏洞,主要檔案仍可藉由檔案系統權限免遭非法修改。

在自行管理的 Linux 系統上設定檔案權限

如果您自行管理網頁伺服器與作業系統設定(您是實體伺服器的擁有者,或是租用了具有 root 存取權的虛擬伺服器),可以參考以下建議。

您可以先設定 LimeSurvey 檔案的擁有者與群組,以便簡化檔案權限的設定。一種可行的做法是,將 LimeSurvey 檔案的擁有者設為您的個人使用者名稱,並將群組設為網頁伺服器群組。通常,此網頁伺服器群組僅包含網頁伺服器帳號(也可能包含另一個網站管理員帳號)。例如,如果您的使用者名稱為「myaccount」,而網頁伺服器使用者為「apache」群組中的「apache」,則可在 shell 中使用以下指令:$ 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 後,您應在 LimeSurvey 的全域設定中一律強制使用 SSL。此外,您也可以透過編輯 config.php 中的相應選項,將 Cookie 設為僅使用「secure」模式。

存取 config.php 檔案

  您必須在首次安裝完成且能正常運作之後,才能更新 application/config/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 中所有實際的設定資訊,並將其貼到 /application/config/config.php 檔案中所指定的另一個檔案(configreal.php)內。這個檔案應放置在非網頁目錄中。如此一來,/application/config/config.php 將不會包含資料庫密碼等資訊,只會包含真正存放資料庫資訊的檔案名稱。

這樣就不必修改其他所有引用 /application/config/config.php 的檔案,因為 config.php 會將它們「重新導向」到位於非網頁目錄、包含所有實際設定資訊的設定檔。

此外,請勿使用 "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>