12,796
回編集
126行目: | 126行目: | ||
# [インストール]画面では、[続行]ボタンを押下する。 | # [インストール]画面では、[続行]ボタンを押下する。 | ||
# [インストール完了]画面では、LocalSettings.phpをダウンロードして、/var/www/html/mediawikiディレクトリ直下に配置する。 | # [インストール完了]画面では、LocalSettings.phpをダウンロードして、/var/www/html/mediawikiディレクトリ直下に配置する。 | ||
<br><br> | |||
== MediaWikiの設定 == | |||
==== アップロード設定 ==== | |||
ファイルのアップロードはMediaWikiのオプション機能であり、デフォルトでは無効になっている。<br> | |||
有効にする場合、Webサーバのユーザによって書き込み可能なディレクトリをWebルートに提供する必要がある。<br> | |||
<br> | |||
これはセキュリティのためにいくつかの意味を持つ。<br> | |||
* このディレクトリは、書き込み可能でなければならない。<br>また、Webサーバの限定されたユーザアカウントが所有しなければならないかもしれない。<br>しかし、マルチユーザシステムでは、他のローカルユーザがアップロードディレクトリに悪意のあるファイルを紛れ込ませることが可能かもしれない。<br>可能な限り、Webサーバのアカウントのみが書き込み可能なディレクトリにする必要がある。 | |||
* PHPの設定は、個々のアップロードに対してファイルサイズの制限を設定するが、MediaWikiは総アップロードに対していかなる制限も設定していない。<br>悪意のある訪問者は多くのファイルをアップロードすることでディスクパーティションを一杯にすることができてしまう。 | |||
* 生成されたサムネイルと上書き確認のためにアップロードされたファイルはMediaWikiのWebインターフェイスに表示されることなくimages/thumbディレクトリとimages/tmpディレクトリに保持される。<br>そのため、それらのサイズにも注意する必要がある。 | |||
<br> | |||
デフォルトの設定では、安全のためにアップロードできるファイルの種類を制限しようとしている。<br> | |||
* デフォルトでは、ファイル拡張子.png、.gif、.jpg、.jpeg、.webpはホワイトリスト($wgFileExtensions)である。 | |||
* ユーザがホワイトリスト($wgStrictFileExtensions)を上書きすることを許可する場合でも、様々な実行可能な拡張子とスクリプト拡張子は明示的にブラックリスト($wgFileBlacklist)に登録される。 | |||
* いくつかの既知の画像ファイル拡張子は、PHPのgetimagesize()関数を使用してそのタイプを検証する。 | |||
* アップロードされたファイルは、Webブラウザのファイルタイプ検出バグに引っかかり、HTMLとして表示されないかチェックされる。 | |||
<br> | |||
予防措置として、アップロードディレクトリ(デフォルトではimagesディレクトリ)にあるPHPスクリプト(およびその他のスクリプトタイプ)のサーバサイドでの実行を明示的に無効にする必要がある。<br> | |||
また、<code>X-Content-Type-Options: nosniff</code>ヘッダを設定することにより、ファイルをスニッフしないようにブラウザに指示する必要がある。<br> | |||
<br> | |||
例えば、MediaWikiのインスタンスが/var/www/html/MediaWikiにある場合、これを行うhttpd.confファイルは、以下に示すような設定になる。<br> | |||
<syntaxhighlight lang="apache"> | |||
# httpd.confファイル | |||
<Directory "/var/www/html/MediaWiki/images"> | |||
# Ignore .htaccess files | |||
AllowOverride None | |||
# Serve HTML as plaintext, don't execute SHTML | |||
AddType text/plain .html .htm .shtml .phtml | |||
# Don't run arbitrary PHP code. | |||
php_admin_flag engine off | |||
# Tell browsers to not sniff files | |||
Header set X-Content-Type-Options nosniff | |||
# If you've other scripting languages, disable them too. | |||
</Directory> | |||
</syntaxhighlight> | |||
<br> | |||
Apache2の設定ファイル(httpd.confファイル)にアクセスできない場合、かつ、.htaccessファイルを作成して特定のディレクトリの設定を上書きできる場合、<br> | |||
アップロードディレクトリ直下に以下に示すような.htaccessファイルを作成することができる。<br> | |||
<syntaxhighlight lang="apache"> | |||
# アップロードディレクトリ直下の.htaccessファイル | |||
# Serve HTML as plaintext, don't execute SHTML | |||
AddType text/plain .html .htm .shtml .phtml .php .php3 .php4 .php5 .php7 .php8 | |||
# Old way of registering php with AddHandler | |||
RemoveHandler .php | |||
# Recent way of registering php with SetHandler | |||
<FilesMatch "\.ph(p[3457]?s?|tml)$"> | |||
SetHandler None | |||
</FilesMatch> | |||
# If you've other scripting languages, disable them too. | |||
</syntaxhighlight> | |||
<br> | |||
PHP設定ファイルのopen_basedirオプションの使用は、アップロードの処理を複雑にするかもしれない。<br> | |||
<br> | |||
上記の解決方法のいずれかを使用している場合、以下に示すような簡単なテストで正常に動作しているかどうかを確認できる。<br> | |||
# アップロードディレクトリにtest.phpファイルを作成する。 | |||
# test.phpファイルに、<?php phpinfo();を記述する。 | |||
# WebブラウザのURL入力欄から、ファイルのパスを入力する。 | |||
# ファイルのテキストが表示されれば問題無いが、そうでない場合はどこかが間違っている。 | |||
<br><br> | <br><br> | ||