ユーザ用ツール

サイト用ツール


wiki:セキュリティ

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

wiki:セキュリティ [2017/01/12 ] (現在)
N_Miya 作成
ライン 1: ライン 1:
 +====== セキュリティ ======
 +
 +DokuWiki は Web アプリケーションであり、多くの場合インターネットから到達可能な公開サーバ上で利用されています。これは、例えばデスクトップシステム上のローカルアプリケーションに比べると、悪意のある人々から攻撃されるリスクがより大きいということを意味します。
 +
 +DokuWiki はセキュリティを念頭に置いて開発されています。私たちはユーザビリティとセキュリティのバランスを取ろうと試みていますが、満足のいく妥協点が見つけられない場合はセキュリティを優先しています。
 +
 +このページでは、あなたの DokuWiki が安全であることを確認するためにはどのような面に気を配らなければならないのかについて、概要を説明します。
 +
 +===== 報告と通知 =====
 +
 +DokuWiki にセキュリティの問題を発見した場合は、私たちにお知らせください。推奨される通知方法は以下の通りです。
 +
 +  * [[:​ja:​bugs|バグレポート]]を投稿する
 +  * [[:​ja:​mailinglist|メーリングリスト]]にメールを投稿する
 +  * [[andi@splitbrain.org]] 個人宛てにメールを送る
 +
 +非常に重大な、パッチが提供される前にバグを公開することで世界中の DokuWiki を危険にさらしてしまう可能性があるようなバグを除き、最初の 2 つの方法が推奨されます。
 +
 +これまでのすべてのセキュリティの問題は、[[http://​bugs.dokuwiki.org/​index.php?​tasks=all&​project=1&​type=1&​cat=5&​status=all&​perpage=20|バグトラッキングシステム]]で見ることができます。
 +
 +発見されたセキュリティの問題の重大性によって、将来のリリースの中で修正されるか (非常に小さな問題の場合)、もしくはバグ修正版リリースが作成されることになります。後者の場合、ユーザーには[[:​ja:​update_check|アップデートの確認]]機構を通して通知されます。
 +
 +古いバージョンの DokuWiki に対してはセキュリティ問題の修正が一切リリースされないため、**常に**最も新しいバージョンの DokuWiki を利用するべきです。
 +
 +===== Web アクセスのセキュリティ =====
 +
 +DokuWiki は、設定データとページデータをファイルに保管します。これらのファイルは、絶対に Web から直接アクセスできてはいけません。DokuWiki の配布用 tar ボールには、通常 Apache Web サーバに対して特定のディレクトリへのアクセス拒否を指示するための ''​.htaccess''​ ファイル一式が含まれています。
 +
 +**もし Apache Web サーバを使用していない場合、もしくは Apache が ''​.htaccess''​ ファイルを利用しない設定となっている場合は、DokuWiki の安全を自分の手で確保する必要があります。**
 +
 +以下に示すディレクトリは、Web からアクセスできては**いけません**。
 +
 +  * ''​data''​
 +  * ''​conf''​
 +  * ''​bin''​
 +  * ''​inc''​ (アクセスできても危険ではありませんが)
 +
 +アクセス権限を調整する必要があるかどうかを確認するには、''​%%http://​yourserver.example.com/​data/​pages/​wiki/​dokuwiki.txt%%''​ にアクセスしてみてください。この方法でファイルにアクセスできてしまうようではいけません。
 +
 +もしディレクトリの安全が適切に確保されていない場合は、安全にする方法について、以下に示すサブセクションをお読みください。
 +
 +==== Apache でのディレクトリへのアクセス拒否 ====
 +
 +一番単純な方法は、Apache の設定で ''​.htaccess''​ 機能を有効にすることです。
 +[[http://​httpd.apache.org/​docs/​2.2/​ja/​howto/​htaccess.html|Apache チュートリアル:​ .htaccess ファイル]]を参照して下さい。
 +
 +DokuWiki には正しく設定された .htaccess ファイルが付属しています。
 +置かれているディレクトリへの全アクセスをブロックする .htaccess ファイルの内容は以下のとおりです:
 +
 +<​code>​
 +order allow,deny
 +deny from all
 +</​code>​
 +
 +**備考**:Ubuntu で apache2 を使用した場合、.htaccess が機能しない!
 +
 +一般的になのか Ubuntu 特有なのか判らないですが、Apache2 は Apache1.x とは若干異なる設定になっているようです。
 +
 +///​etc/​apache2/​sites-available//​ 内の //default// ファイルを変更する必要があります。
 +(http の代わりに https を使う場合は、//​default-ssl//​ ファイル)
 +
 +ファイルには以下があるはずです:
 +
 +<​code>​
 +NameVirtualHost *
 +<​VirtualHost *>
 +        ServerAdmin admin@site.com
 +
 +        DocumentRoot /var/www/
 +        <​Directory />
 +                Options FollowSymLinks
 +                AllowOverride None
 +        </​Directory>​
 +        <​Directory /​var/​www/>​
 +                Options Indexes FollowSymLinks MultiViews
 +                AllowOverride none
 +                Order allow,deny
 +                allow from all
 +        </​Directory>​
 +</​code>​
 +<​nowiki><​Directory /​var/​www/></​nowiki>​ 内の AllowOverride のデフォルトは **none** ですが、**all** にして下さい。
 +
 +apache の設定を更新するために ///​etc/​init.d/​apache2 reload// すると、.htaccess ファイルは有効になるはずです。
 +
 +(See http://​ubuntuforums.org/​showthread.php?​t=47669 の全スレッドを参照して下さい)
 +
 +[全体を変更する代わりに、例えば ''/​var/​www/​path-to-dokuwiki''​ のような、DokuWiki をインストールした特定のディレクトリに対してこの変更をすることもできます。]
 +
 +
 +----
 +
 +他の方法は、''​VirtualHost''​ 設定内で ''​LocationMatch''​ ディレクティブを使用します。
 +''​.htaccess''​ ファイルよりは少しだけ効率的です。
 +''​Directory''​ ディレクティブの直下に追加します:
 +<​code>​
 +<​LocationMatch "/​(data|conf|bin|inc)/">​
 +    Order allow,deny
 +    Deny from all
 +    Satisfy All
 +</​LocationMatch>​
 +</​code>​
 +
 +//​しかし、[[http://​httpd.apache.org/​docs/​2.0/​ja/​sections.html#​file-and-web]] の「いつ何を使うか」章を見て下さい。
 +''​Location''​ ディレクティブは仮想パス (データベースから生成されるウェブページなど) にのみ使用し、ファイルシステム上のオブジェクトへのアクセスを制限するためには決して使用ないように、とあります。
 +私の意見では、.htaccess が利用できないか不十分な場合、ディレクトリ毎の制限をHost の設定ファイル内に直接置くのが最も安全な方法です。
 +これ[[http://​ada.adrianlang.de/​dokuwiki-php-execution#​solutions_in_the_configuration]]は手堅い方法ですし、「標準」とすべきです。//​
 +
 +----
 +
 +例えば、他に wiki インストールがあるとか data|conf|bin|inc ディレクトリを含む別の "​root"​ がある場合、例えば、他に wiki インストールがある等、上の方法では問題が起きる可能性があります。
 +自分の wiki インストールフォルダーのみに LocationMatch 条件を拡張することで、この問題は回避できます。
 +<​code>​
 +        <​Directory /​var/​www/​dokuwiki>​
 +            order deny,allow
 +            allow from all
 +        </​Directory>​
 +
 +        <​LocationMatch "​^/​dokuwiki/​(data|conf|bin|inc)/">​
 +            order allow,deny
 +            deny from all
 +            satisfy all
 +        </​LocationMatch>​
 +</​code>​
 +==== IIS でのディレクトリへのアクセス拒否 ====
 +
 +上記のディレクトリへのアクセスは、IIS の設定で無効にできます。
 +
 +IIS8+ (Servers 2012 and 2012R2) の場合:
 +
 +  - "IIS Request Filtering"​ を選択します。
 +  - "​URL"​ タブを選びます。
 +  - "Allow URL" をクリックします。
 +  - ポップアップボックスに "/​data/​media/"​ を入力し、"​OK"​ をクリックします。
 +  - "Deny Sequence..."​ をクリックします。
 +  - ポップアップボックスに "/​data/"​ を入力し、"​OK"​ をクリックします。
 +  - /conf/ /bin/ /inc/ ディレクトリに対して、"​Deny Sequence..."​ 指示を繰り返します。
 +
 +{{http://​s30.postimg.org/​osgziov3l/​IIS8_filters.jpg}}
 +
 +IIS7 の場合:
 +
 +  - "IIS Request Filtering"​ を選択します。
 +  - "​URL"​ タブを選びます。
 +  - "Deny Sequence"​ をクリックします。
 +  - ポップアップボックスに "/​data/"​ を入力します。
 +
 +"/​data/​media"​ に対して同じ操作をし、"​Always Allow" を選びます(そうしないと、画像・その他が表示されません)。
 +IIS 7.5 の場合、引用符を追加しないで下さい。
 +URL 内の /data/media を読むでしょう。
 +
 +
 +注:デフォルトでは、Management Console snap-in for Internet Information Services 7 には "IIS Request Filtering"​ セクションへのアクセス権がありません。
 +[[http://​www.microsoft.com/​web/​downloads/​platform.aspx|Web Platform Installer]] を使用して "IIS Administration pack 1.0" をインストールすると有効になります。
 +
 +注2:"/​data"​ ではなく "/​data/"​ と入力することを確認して下さい。
 +そうでないと、"​data"​ で始まるページにアクセスできなくなります。
 +
 +**IIS 7+ の代替方法** ​
 +
 +(共用ホストのように)IIS の設定オプションにアクセスできない場合、以下の方法が使用可能です。
 +
 +代替方法1:
 +
 +DokuWiki ルートディレクトリに次のファイルを配置できます:
 +
 +<file xml web.config>​
 +
 +<?xml version="​1.0"​ encoding="​UTF-8"?>​
 +<​configuration>​
 +    <​system.webServer>​
 +        <​security>​
 +            <​requestFiltering>​
 +                <​filteringRules>​
 +                </​filteringRules>​
 +                <​alwaysAllowedUrls>​
 +                    <add url="/​data/​media/"​ />
 +                </​alwaysAllowedUrls>​
 +                <​denyUrlSequences>​
 +                    <add sequence="/​data/"​ />
 +                    <add sequence="/​conf/"​ />
 +                    <add sequence="/​bin/"​ />
 +                    <add sequence="/​inc/"​ />
 +                </​denyUrlSequences>​
 +            </​requestFiltering>​
 +        </​security>​
 +    </​system.webServer>​
 +</​configuration>​
 +
 +</​file>​
 +
 +代替方法2:
 +
 +保護を必要とするディレクトリに次の web.config ファイルを配置できます。
 +
 +  * ''​data''​
 +  * ''​conf''​
 +  * ''​bin''​
 +  * ''​inc''​ (アクセスしても危険はありませんが)
 +
 +<file xml web.config>​
 +
 +<?xml version="​1.0"​ encoding="​UTF-8"?>​
 +<​configuration>​
 +    <​system.webServer>​
 +        <​handlers accessPolicy="​None"​ />
 +    </​system.webServer>​
 +</​configuration>​
 +
 +
 +</​file>​
 +
 +IIS 6.5 以前の場合:
 +
 +  - 設定用のツールを起動します:​ スタート -> 設定 -> コントロール パネル -> 管理ツール -> インターネット インフォメーション サービス
 +  - 保護したいディレクトリまで進みます:​ ローカル コンピュータ -> Web サイト -> 規定の Web サイト -> //​ディレクトリへのパス//​
 +  - フォルダを右クリックしてプロパティを選択 -> ディレクトリ セキュリティ -> IP アドレスとドメイン名の制限 -> 編集
 +  - 「規定では、すべてのコンピュータからの接続を:​ 拒否する」を選択します。
 +  - /data/ /conf/ /bin/ /inc/ ディレクトリに対して、これを繰り返します。
 +==== data ディレクトリを変更する ====
 +
 +最も重要なことは ''​data''​ ディレクトリを安全にすることです。上述のような方法でディレクトリへのアクセス拒否を設定できない場合には、少なくとも data ディレクトリの場所を推測できないように変更すべきです。
 +
 +具体的には data ディレクトリの名前を複雑なもの(例:英数字からなるランダムな文字列)に代え、その場所を ''​conf/​local.php''​ ファイルの [[ja:​config:​savedir|設定項目:​ savedir]] オプションに設定します。
 +
 +==== ドキュメントルート外へのディレクトリの移動 ====
 +
 +上述のディレクトリへのアクセスを避けるための最も安全な方法は、これらのディレクトリを、Web サーバのいわゆる「ドキュメントルート」の外側に移動してしまうことです。
 +
 +=== data ディレクトリ ===
 +
 +  - ''​data''​ ディレクトリをドキュメントルートの外側に移動してください。
 +  - 新しい ''​data''​ ディレクトリの場所を指し示すため、[[:​ja:​config:​savedir|設定項目:​ savedir]] を編集してください。
 +
 +例えば、''​data''​ ディレクトリが ''/​home/​yourname/​data''​ に移動された場合は、以下の行を ''​conf/​local.php''​ ファイルに追加してください。
 +
 +  $conf['​savedir'​] = '/​home/​yourname/​data/';​
 +
 +=== conf ディレクトリ ===
 +
 +  - ''​conf''​ ディレクトリ (およびその内容) をドキュメントルートの外側に移動してください。
 +  - ''​preload.php''​ という名前のファイルを ''​inc''​ ディレクトリ内に作成し、新しい ''​conf''​ ディレクトリの位置を定義する ''​DOKU_CONF''​ という定数を設定してください。
 +
 +例えば、''​conf''​ ディレクトリが ''/​home/​yourname/​conf''​ に移動された場合は、以下の ''​inc/​preload.php''​ ファイルを作成してください。
 +
 +<code php inc/​preload.php>​
 +<?php
 +
 +define('​DOKU_CONF','/​home/​yourname/​conf/'​);​
 +</​code>​
 +
 +=== bin ディレクトリ ===
 +
 +''​bin''​ ディレクトリには、[[:​ja:​cli|コマンドラインツール]]が含まれています。もしサーバのシェルにアクセスできない場合は、単純にこのディレクトリとその内容を削除することができます。アクセスできる場合は、このディレクトリをドキュメントルートの外に移動してください。追加の設定は不要です。
 +
 +=== inc ディレクトリ ===
 +
 +''​inc''​ ディレクトリをドキュメントルートの外に移動するための簡単な方法は、現在のところありません。しかし、このディレクトリには注意を払うべき情報が一切含まれていないため、なんとしてでも移動しようと努力する価値はありません。
 +
 +===== DokuWiki の設定 =====
 +
 +DokuWiki には、インストールされた DokuWiki の様々なセキュリティ面に影響を与えるいくつかの設定項目があります。それぞれの設定項目が何を行うためのもので、推奨される設定がどのようなものであるかを知るには、以下のページを参照してください。
 +
 +  * [[:​ja:​config:​allowdebug]] -- システム情報の漏洩を防ぐためデバッグ出力を無効化する :!:
 +  * [[:​ja:​config:​fmode]]、[[:​ja:​config:​dmode]] -- DokuWiki が作成するファイルのパーミッションを設定する ([[:​ja:​permissions|パーミッション]]の設定に関する情報も参照してください)
 +  * [[:​ja:​config:​fetchsize]] -- 外部データのキャッシュ動作を設定する
 +  * [[:​ja:​config:​fullpath]] -- ページのフルパスを表示する
 +  * すべての[[:​ja:​auth|認証の設定]]
 +  * [[:​ja:​config:​usewordblock]] -- ブラックリストを用いてスパム投稿を防ぐ
 +  * [[:​ja:​config:​mailguard]] -- ロボットによるメールアドレスの収集を避ける
 +  * [[:​ja:​config:​iexssprotect]] -- Internet Explorer が持つ XSS の問題から保護する
 +  * [[:​ja:​config:​htmlok]] -- HTML コードの埋め込みを許可する
 +  * [[:​ja:​config:​phpok]] -- PHP コードの埋め込みを許可する
 +  * [[:​ja:​config:​hidepages]] -- 特定のページを索引や検索結果から隠す
 +  * [[:​ja:​config:​safemodehack]] -- セーフモードの制限に対処する
 +
 +===== プラグインのセキュリティ =====
 +
 +DokuWiki には、[[:​ja:​plugins|コミュニティから提供された多数のプラグイン]]があります。プラグインは、新しいコードを追加することによって DokuWiki に新しい機能を追加します。これは、実質的にコードからあなたのサーバに対して任意にアクセスできるということを意味します。さらにプラグインは DokuWiki とは別に、もっぱらその場限りの方法で配布されています。それらは DokuWiki コアのコードベースが受けているような一定の注目や検査の影響下にはありません。従って、プラグインをインストールする前にはセキュリティへの警戒が必要です。
 +
 +以下に、インストールするプラグインを選ぶ際に役立ついくつかのヒントを示します。
 +
 +  * インストールする//​前に//​、可能であればプラグインのソースコードを自身で検査してください。
 +  * 疑わしい場合は、[[:​ja:​mailinglist|メーリングリスト]]で質問してください。
 +  * プラグインは、外部から直接アクセス可能な ''​lib''​ ディレクトリの下にインストールされます。プラグインに何が含まれているかを精査し、必要に応じて .htaccess ファイルでアクセスを遮断してください。
 +  * プラグインは、DokuWiki プロジェクトとは直接関係のない開発者によって作成されています。彼らは経験不足であったり、悪意を持っていたり、危険にさらされたサーバ上でプラグインのソースコードをホストしている可能性があります。あなたが誰を信頼するかについて注意してください!
 +  * セキュリティ警告の言及に備えてプラグインのページを確認し、新しいリリースが利用可能になった場合はプラグインをアップグレードしてください。
 +
 +プラグインの[[ja:​devel:​security#​セキュリティ問題に関する報告は・・|セキュリティ問題に関する報告は・・]] もご覧ください。
 +
 +===== アクセス制御について =====
 +
 +[[:​ja:​acl|アクセス制御リスト (ACL)]] を設定することによって、DokuWiki のページまたは名前空間に対してユーザがどのようなアクセス権をもつかをコントロールできます。例えば、ユーザが属するグループあるいはユーザごとに、ページの閲覧や編集を許可したり、制限することができます。
 +
 +===== 追加の読み物 =====
 +
 +以下に、セキュリティに関する内部および外部のページをもう少し挙げておきます。
 +
 +  * [[:​ja:​tips:​httpslogin|HTTPS でのログインを強制する]]
 +  * [[:​ja:​install:​php|DokuWiki 向けの PHP 設定]]
 +  * [[:​ja:​tips:​clean_acl|削除されたページ向けの ACL ルールを削除する]]
 +  * {{http://​www.apachesecurity.net/​download/​apachesecurity-ch03.pdf|Apache セキュリティ - 第 3 章: PHP}}
  
wiki/セキュリティ.txt · 最終更新: 2017/01/12 by N_Miya