安裝安全性提示
From LimeSurvey Manual
一般資訊
請注意,我們非常重視安全性問題,並會迅速回應。因此,如果您發現 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 子目錄需要讓網頁伺服器使用者具有寫入權限。
在自行管理的 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 檔案包含您資料庫伺服器的使用者名稱和密碼。這會帶來一定的安全風險,尤其是在您使用的登入帳號對資料庫擁有高階管理權限時。萬一發生錯誤,將此 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>