セキュリティに関するヒント
From LimeSurvey Manual
概要
LimeSurveyはデフォルトで有効になっている独自のセキュリティに依存しています。このソフトウェアの開発者は、このソフトウェアの妥当性またはセキュリティレベルに関して、一切の責任を負いません。しかし、我々はセキュリティ問題を非常に真剣に受け止め、迅速に対応します。したがって、LimeSurveyにセキュリティ上の問題がある場合は、info@limesurvey.orgに電子メールを送信するか、バグトラッカーでバグレポートを提出してください(プライベートとしてマークしてください)。
Webサーバーの制限
Apacheを使用する場合、LimeSurverは制限のために別のhtaccessファイルを使用します。AllowOverride
によってhtaccessが使用できるようになっているか確認してください。
他のウェブサーバーまたはAllowOverride None
を使用したい場合は、以下のようにすべきです。
- (任意)application、protected、framework、themes/*/viewsにあるすべてのアクセスを不可にする
- ユーザーによる /upload/surveys/.*/fu_[a-z0-9] へのアップロードを不可にする
- (任意)uploadディレクトリーの実行可能ファイルへのアクセスを不可にする
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とそのすべてのサブディレクトリーについても、画像とメディアファイルをアップロードできるようにするため、読み書き権限設定する必要があります。
- その他のディレクトリーとファイルはすべて読み取り専用に設定します。
$ chmod -R o-r-w-x limesurvey/
$ chmod -R -w limesurvey/
$ chmod -R 770 limesurvey/application/config
$ chmod -R 770 limesurvey/tmp
$ chmod -R 770 limesurvey/upload
ホストされているウェブサーバーでのファイルアクセス権の設定
ホストされた環境でウェブアプリケーションを保護するための標準的な手順は、ホストされた環境がさまざまな点で異なるため、非常に難しい問題です。
管理されているサーバーの場合、スクリプトが正常に動作するためにはいくつかのディレクトリーへの書き込み権限が必要です。
- /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にはデータベースのパスワードなどがなくなり、データベースの情報を含むファイルの名前だけが書かれていることになります。
これにより、/application/config/config.phpを含む他のすべてのファイルを変更する必要がなくなります。これは、config.phpがウェブ以外のディレクトリーにある本物の設定情報を含む設定ファイルに向けて'リダイレクト'するためです。ただし、configreal.phpを編集して、絶対パスを使用するようにパラメータを変更する必要があります。
'basePath' => dirname(dirname('''FILE''')),
'runtimePath' => dirname(dirname(dirname('''FILE'''))).DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'runtime',
[...]
'urlManager' => array(
[...]
'rules' => require('routes.php'),
[...]
);
例:
'basePath' => '/var/www/htdocs/limesurvey',
'runtimePath' => '/var/www/htdocs/limesurvey/tmp/runtime',
[...]
'urlManager' => array(
[...]
'rules' => require('/var/www/htdocs/limesurvey/config/routes.php'),
[...]
);
また、既定のユーザーとして "admin"を使用しないでください。MySQLデータベース(またはLimeSurveyをインストールしたデータベース)で、既定のユーザー名"admin"を好きなもの(例えば "admin_xyz")に変更してください。これにより、管理者の新しいユーザー名を推測するのがずっと難しくなります。ユーザー名は、侵入者がアクセスするために使用する2つの変数の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>