セキュリティに関するヒント
From LimeSurvey Manual
概要
LimeSurveyではセキュリティ上の問題を非常に真剣に受け止め、迅速に対応しています。LimeSurveyにセキュリティ上の問題を発見された場合は、バグトラッカーでバグレポートを作成してお知らせください(バグの重大度またはカテゴリーを「security」に設定してください)。
セキュリティ上の問題や脆弱性を報告する際の詳細については、セキュリティポリシーをご確認ください。
Webサーバーの制限
LimeSurveyには、サーバー上でのみ使用するファイルやディレクトリへのウェブアクセスをブロックする .htaccess ファイルが同梱されています。Apacheを使用する場合は、AllowOverride All でこれらのファイルが有効になっていること、および mod_rewrite が有効になっていることを確認してください。
nginx や IIS などの他のウェブサーバーは .htaccess ファイルを無視します。AllowOverride None を設定したApacheも同様です。その場合は、ウェブサーバーの設定で以下へのウェブアクセスを拒否してください。
- application、vendor、docs、locale、modules、tmp/runtime の各ディレクトリ
- assets/packages/kcfinder 内の conf、core、doc、integration、lang、lib、tpl の各ディレクトリ
- 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)
- アンケート参加者がアップロードしたファイル: upload/surveys とそのサブディレクトリにある、fu_ で始まるファイル
また、uploadディレクトリ内のスクリプト(PHP、Perl、Python、シェルスクリプトなど)が決して実行されないようにしてください。
LimeSurveyのパッケージには、vendorディレクトリやdocsディレクトリなど、同梱されているライブラリのドキュメント、サンプル、テストも含まれています。これらのファイルは削除しないでください。次回のアップデートで元に戻ります。代わりに、上記のとおりこれらのディレクトリへのウェブアクセスを拒否してください。
nginxの設定例は、LimeSurvey nginx設定例のページにあります。
Linuxのファイル権限
Linuxサーバーを使用している場合は、LimeSureyのインストールを保護するため、ファイルのアクセス権を設定する必要があります。
Linux/*nixにおけるファイル権限の基本
Linux/*nixオペレーティングシステムはマルチユーザーです。これは、あなたの個人アカウントとは別に、システム上に他のユーザーアカウントが存在する可能性があることを意味し、他のユーザーにどのようなアクセス許可を与えるかを管理する必要があります。
'root'アカウントはスーパー管理ユーザーであるため、ファイルにアクセスするためのアクセス権が常に与えられます(設定したファイルアクセス権に関係なく)。
LimeSurveyを実行しているWebサーバーも特定のID(ユーザー)で実行されています。Linuxでは通常、'www'、'www-data'(Debian / Ubuntu上)、'apache'または'nobody'というユーザーです。しかし、ホスティング業者によっては、あなたの個人ユーザーでLimeSurveyスクリプトを実行できるシステム(suexecなど)を使用しているものもあります。もちろん、ウェブサーバーユーザーは、LimeSurveyファイルに対する読み取り権限が必要です。ただし、LimeSurveyサブディレクトリーのごく一部は、ウェブサーバーユーザーによって書き込み可能である必要があります。
自己管理型Linuxシステムでのファイルアクセス権の設定
ウェブサーバーとオペレーティングシステムの構成を管理している(物理サーバーの所有者であるか、ルートアクセス権を持つ仮想サーバーを借りている)場合は、以下の推奨事項を検討してください。
最初に、LimeSurveyファイルの所有者とグループを設定して、ファイルのアクセス権限設定を簡略化することができます。例えば、LimeSurveyファイルの所有者を個人のユーザー名に設定し、LimeSurveyファイルのグループをウェブサーバーグループに設定します。通常、このウェブサーバーグループには、ウェブサーバーアカウント(および、場合によって別のウェブマスターアカウント)のみが含まれます。例えば、あなたのユーザー名が'myaccount'で、ウェブサーバーユーザーが'apache'グループの'apache'であれば、シェルアクセスから次のコマンドを使います。$ chown -R myaccount:apache limesurvey/。その後、ファイルとサブディレクトリーのアクセス権限を設定します。
スクリプトが正常に動作するためには、いくつかのディレクトリーへの書き込み権限が必要です。
- /limesurvey/application/configディレクトリーには、アプリケーションの構成設定を保存するための読み書きの権限が必要です。
- /limesurvey/tmpディレクトリーとそのサブディレクトリーはインポート/アップロードに使用され、ウェブサーバーが読み書きの権限を持つ必要があります。
- upload/directoryとそのすべてのサブディレクトリーについても、画像とメディアファイルをアップロードできるようにするため、読み書き権限設定する必要があります。
- その他のディレクトリーとファイルはすべて読み取り専用に設定します。
ホストされているウェブサーバーでのファイルアクセス権の設定
ホストされた環境でウェブアプリケーションを保護するための標準的な手順は、ホストされた環境がさまざまな点で異なるため、非常に難しい問題です。
管理されているサーバーの場合、スクリプトが正常に動作するためにはいくつかのディレクトリーへの書き込み権限が必要です。
- /limesurvey/tmpディレクトリーはインポート/アップロードに使用するため、ウェブサーバーに読み書き権限を設定する必要があります。
- upload/directoryとそのすべてのサブディレクトリーにも画像/メディアファイルのアップロードを有効にするため、ウェブサーバーに読み書き権限を設定する必要があります。
- その他のディレクトリーとファイルはすべて読み取り専用に設定します。
- ウェブサーバーの設定によっては、ウェブサーバーが書き込みを行うフォルダーの権限を755または777に変更する必要があります。最初に755を試してください。動作しない場合は、777にしてください。
- config.phpへのアクセス権を750にすることにより、他のユーザーのアクセスを制限することができますが、動作しない場合は755と設定します。
Windowsのファイル権限
Windowsサーバーを使用している場合は、管理者フォルダでウェブサーバープロセスの所有者がディレクトリーにファイルを書き込むことができるようにする必要があります。残りのファイルは読み取り専用に設定して実行できます。
その他のセキュリティ問題
以下は推奨事項です。LimeSurveyは一般的に、これらの追加の対策がなくても非常に安全です。ただし、非常に機密性の高いデータを収集する場合は、セキュリティーを強化するとよいでしょう。
SSLの使用
機密性の高いアンケートデータにはSSLの使用を推奨します。通常は、ウェブサーバーを正しく構成し、SSQL証明書を使用してSSLを有効にします。SSLを有効にしている場合は、LimeSurveyの全体設定で常にSSLを適用するよう設定します。さらに、config.phpのそれぞれのオプションを編集することにより、 '安全な'cookieを使用するように設定することもできます。
config.phpファイルへのアクセス
/application/config/config.phpファイルには、データベースサーバーのユーザー名とパスワードが含まれています。特に、データベースに管理アクセスレベルが高いユーザーでログインしている場合は、セキュリティ上の問題が発生します。何らかのエラーが発生し、このPHPファイルの内容がユーザーのブラウザに表示された場合、データベースのパスワードやその他の詳細情報が漏洩する可能性があります(ただし、これはまれなシナリオです)。リスクを最小限に抑えるには、LimeSurveyデータベースに特定の権限しか持たない特定のログインユーザーを設定することです。
この情報を保護するもう1つの方法は、/application/config/config.phpファイルの情報をウェブディレクトリー以外のディレクトリーに入れることです。つまり、Apacheユーザーの場合、これはhtdocs(public_htmlまたはwwwの場合もある)フォルダよりも上のディレクトリーです。基本的にはconfig.phpを使用しますが、その中には実際の設定情報を含むファイルを含む行を1行加えます(例:<?php return include("/home/hostfolder/safedata/configreal.php"); ?>)。/application/config/config.phpから実際の設定情報をすべて削除し、/application/config/config.phpファイルに記述されている別のファイル(configreal.php)に貼り付けます。このファイルは、ウェブ以外のディレクトリーに配置する必要があります。これにより、/application/config/config.phpにはデータベースのパスワードなどがなくなり、データベースの情報を含むファイルの名前だけが書かれていることになります。
config.phpが、ウェブ以外のディレクトリーにある実際の設定情報をすべて含む設定ファイルへ「リダイレクト」するため、/application/config/config.phpを含む他のすべてのファイルを変更する必要がなくなります。
また、デフォルトのユーザーとして "admin" や "administrator" を使用しないでください。MySQLデータベース(またはLimeSurveyをインストールしたデータベース)で、デフォルトのユーザー名 "admin" を好きなもの(例えば "admin_xyz")に変更してください。これにより、管理者の新しいユーザー名を推測するのがずっと難しくなります。ユーザー名は、侵入者がアクセスするために使用できる2つの変数の1つです。もう1つは管理者のパスワードです。そのため、両方とも細心の注意を払って設定してください。
コンテンツセキュリティポリシー(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>