Manual:Security/ja


 * If you believe you have found a security problem in MediaWiki or in one of Wikimedia's web sites, see http://www.mediawiki.org/wiki/Security for contact information so we can prepare a bug fix release.

最新の状態に保つ
やらなければならない、ほとんどの重要なセキュリティステップは、ソフトウェアを最新にすることである. MediaWikiとそれに従属するソフトウェアの両方は、あなたに影響するであろう、新しく発見されたセキュリティの脆弱性を収集する新しいバージョンを時折作成する.

MediaWikiを動かしている誰でもmediawiki-announce mailing listを購読することを強く推奨する. これは、新しいバージョンのアナウンスのみの、非常に流量の少ないMLである.

In accordance with MediaWiki's version lifecycle, each release will receive security updates for one year. Older releases may contain known-but-unpatched security holes.

サーバ上で動いているApache、PHP、MySQLと他のソフトウェアをアップデートすることも忘れないこと – OSと他のwebアプリケーションもである. wormの圧タックのphpBB中中の欠陥によって、いくつかの人が使っているMediaWiki 1.3.x インストールは2004秋中に影響される;利用者のパッチされてない他のphpBBサイトを通して、それは得られ、それに"you are hacked"というメッセージがシステム上の他の書き込み可能な.phpファイルに追加され、それにはMediaWiki 1.3が使うコンパイルされたテンプレートも含む.

一般的なPHP設定の推奨
ここにはPHP環境に対するよりよい小さなアドバイスがあり、それらはMediaWikiに必須のものではない.

php.iniまたはその他の設定のためのPHP構成の推奨:
 * を無効にする.
 * 多くのPHPセキュリティ攻撃はグローバル変数の価のインジェクションに基づいているため、それをoffにすることで潜在的な脆弱性をなくせる.
 * もしも他のwebアプリケーションのために を必要とするならば、仮想ホストかそれが必要とするサブディレクトリのみに選択的に有効にすることを考慮すべきである.
 * MediaWikiは、もしもそれがonでもセキュアにすべきである;これをoffにすることは、未知の脆弱性の可能性に対して予防処置を取ることになる.
 * 特にそれを必要としない限り、 を無効にする.
 * リモートPHPコード実行の脆弱性は 又は  をURL中に埋め込むことが可能になることに依存するだろう. もしもリモートファイルロードを必要としないなら、offにすることでこの種の脆弱性コードの攻撃を防げる.
 * MediaWikiはLucene検索拡張、OAI収穫者拡張と1.5中でSpecial:Importのある種の使用のために、この設定をonにすることを要求するかもしれない. これは、しかし、通常のインストール中で要求されない.
 * MediaWikiは、もしもこれがonであっても安全であるべきである;これをoffにすることは、未知の脆弱性の可能性に対する予防策となる.
 * を off に設定する.
 * もしもこれをonにするならば、セッションIDは、もしも Cookie がその役目を果たさないとき、ときどきURLに付加されるだろう. これはリファラーデータかリンクのカットandペーストを通して第三者のサイトにログインセッションデータをもらす可能性がある.
 * 常時もしもこれがonならばoffにすべきである.

php.iniは以下の中に位置する:
 * /etc/php.ini (Red Hat Linux, SuSE / Novell Linux)
 * /etc/php4/apache/php.ini (Debian woody と sarge、php4 と apache 1.3を使う Ubuntu 6.10)
 * /etc/php5/apache2/php.ini (php5 と apache2 を使う Ubuntu 6.10)
 * /etc/httpd/php.ini (Trustix Secure Linux 3.0)
 * /usr/local/php/lib/php.ini (Marc Liyanage の PHP パッケージを使う Mac OS X)
 * /opt/local/etc/php5/php.ini (Mac OS X if using Macports)
 * /Applications/MAMP/conf/php5/php.ini (Mac OS X 10.5/10.6 mit MAMP)
 * /etc/apache/php.ini (Slackware 10.x), /etc/httpd/php.ini (on later Slackware versions)
 * /var/www/conf/php.ini (OpenBSD)
 * /usr/local/etc/php.ini (FreeBSD)
 * /usr/pkg/etc/php.ini (NetBSD)
 * /usr/syno/etc/php.ini (Synology NAS)
 * Gentoo Linux:
 * /etc/php/apache2-php4/php.ini
 * /etc/php/cli-php4/php.ini
 * /etc/apache2/php.ini
 * c:\windows\php.ini (Windows)

php.ini中でこの行を見つけたならば、例をあげると:

register_globals = On

を: register_globals = Off

に変更する. 代替として、これをapacheディレクティブで、ディレクトリ単位でregister_globalsをoffにできる: php_flag register_globals off Then restart Apache to reload the changes by  or   (SuSE).

ApacheモジュールとしてPHPがインストールされた、複数の人が使うシステムでは、全ての利用者のスクリプトは、同じ、制限された利用者アカウント下で動作する. これは、(データベースパスワードを含む)あなたの構成ファイルを読むためのアクセスと、ログインセッションのデータの読み出しと変更、あるいは(もしも可能ならば)アップロードディレクトリ中に直接ファイルを書くということを、他の利用者に与えるということである.

複数利用者のセキュリティのために、それぞれ固有のアカウント下で各々の利用者のスクリプトを動作させるCGI/FastCGI構成を使うか、他の利用者のファイルへのスクリプトアクセスを制限する、Safe Modeを使うことを考慮する. セーフもーでは、アップロードと、他のプログラムにシェルから抜けられる拡張のようなMediaWikiのいくつかの機能が使えてもよいことに注意.

一般的なMySQLの推奨
一般的に、MySQLデータベースへのアクセスを最小限にすべきである. もしも、それが動作するマシンだけの単一のマシンからのアクセスで使われるならば、ネットワークサポートをやめるか、ローカルなネットワークからのアクセスのみ(以下で説明するように、loopbackデバイス経由で)を有効にすることを考慮し、そうすることで、サーバはUNIXドメインソケット経由でのみローカルクライアントと通信できる.

もしも、制限された数のクライアントマシンがあるネットワークで使うならば、それらのマシンからか、あるいはローカルサブネットからのみポート3306(MySQLのポート)にアクセスを認める、ファイアウォールのルールを設定することを考慮し、より大きなネットワークからのすべてのアクセスを拒否する. これはアクシデントによって、MySQL中のいくつかの未知な欠陥にアクセスすることにより、間違って設定した、過度に広範囲の GRANT やパスワードの漏洩を防ぐのに役立つ.

もしもMediaWikiのインストーラーを通じてMediaWikiのための新しいMySQL利用者を作成したならば、何らかの合法的なアクセスを2番目のサーバからローカルのものと同じように動作することを確実にする. 必要に応じて個別の許可を利用者アカウントそれ自身で設定するか、手動で狭めることを考えてもよい. The database user only needs to have SELECT, INSERT, UPDATE and DELETE permissions for the database.Manual:LocalSettings.php

MediaWiki中の テーブルはハッシュされた利用者のパスワードと電子メールアドレスを含む可能性があり、一般的に個人情報と考えられることに注意.

以下も参照:
 * mysql コマンドライン オプション.
 * Setting  in your my.ini (under section  ) will cause MySQL to only listen on the loopback interface. This is the default in the EasyPHP install for Windows
 * GRANT and REVOKE syntax

If the MySQL database has leaked
If the mysql database has leaked to the public, in LocalSettings.php:
 * 1) Change $wgDBpassword if that leaked too
 * 2) Change some letters in $wgSecretKey
 * 3) Reset the user_token column in your user table so that it can't be used to impersonate your users

手動でのインストール
もしも、webベースのインストーラーを使うならば、 ディレクトリを書き込み可と ファイルが書き込み中の間に、サーバ上でインストーラーを動かしている以外でだれかによって攻撃の可能性がある.

通常、これは非常に大きなリスクではないが、もしもそれが認められないならば(あるいはもしも多数のwikiにバッチでインストールする必要があるならば)、手動でのインストールを考慮する:
 * データベースの作成
 * 利用者のパーミッションの許可. The database user only needs to have SELECT, INSERT, UPDATE and DELETE permissions for the database.Manual:LocalSettings.php
 * Source  to create the tables.
 * Create a  based on a sample or the generation code in.



もしもPHPがApacheモジュールとして動いているならば、webインストーラーによって生成されるLocalSettings.php は、通常Apacheのユーザーアカウントによって所有される. これを確実にするために、他の利用者か、(マルチユーザーシステムについての上記の注意を参照)か、悪意のある脆弱性のある侵入用webアプリケーションコードによって再度変更できないので、別のアカウントに再割り当てすべきである. (もしも制限されたアクセス権限しか持っていないならば、ファイルを移動する代りにコピーを考慮する;新しいコピーはあなたの権限となる. )

If LocalSettings.php has leaked
If LocalSettings.php has leaked to the public, reprotect it and:
 * 1) Change $wgDBpassword
 * 2) Change some letters in $wgSecretKey
 * 3) Possibly make a slightly different $wgSpamRegex
 * 4) Reset the user_token column in your user table so that it can't be used to impersonate your users

Database passwords
See Manual:Securing database passwords for some precautions you may wish to take to reduce the risk of MySQL passwords being presented to the web.

代替のファイルレイアウト
MediaWikiはインストールを容易にするために、ディストリビューションアーカイブから展開された場所で動くようにデザインされている.

しかしながら、大量のインストール中で重複を防ぐか、安全のためにweb rootから重要なファイルを外すために、手動で種々のファイルを統合したり再配置できる.

Moving the main includes and skin files may require carefully picking and choosing and altering the  set in your. Experiment with this as desired.

If working to improve security, keep in mind that  uses the current directory as a base. This means that only setting your  may not help to improve the security of your installation.

Move sensitive information
LocalSettings.phpからデータベースパスワードか個人情報の類を、webドキュメントroot の外側に配置する他のファイルに移動することと、LocalSettings.phpからそのファイルを することを考慮する. これは、webサーバ構成エラーがPHP拡張を無効にし、ファイルのソーステキスト中に暴露されることでデータベースのパスワードが危険に去らされないことを確実にする.

同様に、 を何らかのエディタで変更して、変更されたファイル拡張子で同じディレクトリ中にバックアップファイルをそのままにしておくことは、もしも、だれかが、 として平文テキストで要求する時にコピーを提供してしまうことになる. もしも、そのようなエディタを使うならば、バックアップを無効化するか、web root以外に情報を置く.

A MediaWiki debug logfile as it is used for debugging also contains sensitive data. Make sure to always disallow access for non authorised persons and the public as explained, delete remains of such logfiles when they are not needed, and comment or clear the logfile lines in your.

Set DocumentRoot to /dev/null
A more secure option for the Apache Web Server is to set the  to an empty or non-existent directory, and then use   directives in the Apache configuration to expose only the scripts and directories that need to be web-accessible.

Loader scripts
A PHP-only solution that will work with any web server is to write a series of scripts that explicitly  to a specific directory and then require one or more source files. For example:

利用者のセキュリティ
MediaWiki中の利用者インタフェースメッセージを編集できる: ページレイアウト中にHTMLとJavaScriptコードに名前空間は導入できる. これは、だれでもdatabase中のcurテーブルにアクセスでき直接かけると言うのと同じように、wiki利用者は'sysop'のパーミッションを持つことを意味する.

悪意のあるここへの攻撃が利用者のパスワードを盗聴するために使われるか、ブラウザの脆弱性を使うために使われる(スパイウェアのインストールなど). そのため、信頼できる利用者のみにそれらのパーミッションを設定すべきである.

アップロードセキュリティ

 * see also &rarr; Manual:Configuring file uploads

The main concern is: How do we prevent users from uploading malicious files?

ファイルのアップロードはMediaWikiのオプションの機能で、既定値では無効になっている. もしも有効にするならば、webサーバの利用者によって書き込めるディレクトリをweb root内に提供もしなければならない.

ここに、いくつかのセキュリティのための実装を記する:
 * ディレクトリはworld-writableか、webサーバの制限された利用者アカウントによって所有されなければならない. マルチユーザーシステム上では、システムはアップロードディレクトリ(上記のマルチユーザーの注意を参照)中に悪意のあるファイルを滑り込ませることが、他のローカルな利用者に可能である
 * PHPの構成が明示的なアップロードにおいてファイルサイズ制限を行なっている間、MediaWikiはトータルのアップロードに何らの制限をしない. 悪意のある(あるいはあまりにも熱心な)訪問者は大量のアップロードでディスクパーティションを埋め尽くせる.
 * 上書きの確認のために保持する、作成されたサムネイルとアップロードファイルは、MediaWikiwebインタフェース中で見える注意無しで、images/thumbとimages/tmp中に保持される.

既定値の構成は安全のためにアップロードできるファイルのタイプの制限をしている:
 * 既定値で、.png、 .gif、と.jpgは許可される.
 * 種々の実行可能なものとスクリプト用の拡張子はもしもホワイトリストで無効にしたとしても、例外的にブラックリストされる.
 * PHPのgetimagesize機能を使うことで、固有のタイプを持つ、いくつかの概知の画像のファイル拡張子は検査される.
 * それらをHTMLとして表示させる可能性がある、MSIEとSafari中のファイルタイプ検知バグを妨害できるかどうかを見るためにアップロードされたファイルはチェックされる.

これらのチェックが不十分な場合に備えて、アップロードディレクトリ(既定値では )中でPHPスクリプトのサーバサイドでの実行(とその他の任意の利用可能なスクリプトタイプ)を明示的に無効にして更なる保護を得ることができる.

例をあげると、Apacheの .confファイルは、もしも/Library/MediaWiki/web 中にあるMediaWikiインスタンスが以下のような場合、これを行なうためにばらばらにする.

PHPのセーフモードかopen_basedirオプションを使うことは、アップロードの扱いを複雑にするだろうと言うことに注意.

外部プログラム

 * はマージでの競合を編集するために実行される.
 * もしもサムネイルかSVG画像のためのImageMagickが有効になっているならば、 はアップロードファイル上で動くだろう.
 * もしも有効ならば、texvc数学拡張は プログラムを呼び出し、それは、code>latex 、 、と を呼び出す(それは  を呼び出す).

関連項目

 * 一般
 * Category:User access extensions
 * コンフィギュレーション設定: アクセス
 * meta:Category:MediaWiki authentication
 * 収集計画/要件
 * Manual:Before installing
 * 利用者認証
 * Authentication
 * AuthPlugin - 利用者のアイデンティティを決定するプラグイン構造を説明しています
 * Manual:$wgAuth - プラグイン構造で使用されるコンフィギュレーション変数
 * Category:Authentication and login - 利用可能な認証拡張機能
 * Manual:FAQ/ja
 * 利用者活動のモニタリング
 * Category:User activity extensions
 * IP、利用者アイデンティティによるアクセス権の割り当て
 * Access control
 * Manual:FAQ/ja
 * Manual:FAQ/ja
 * Manual:User rights/ja - デフォルトのMediaWiki権限構造のコンフィギュレーションを説明しています
 * Manual:Preventing access/ja - 様々なティップスとハウトゥ
 * Manual:Image Authorisation/ja - 画像へのアクセス制限に基づいたIP/利用者
 * Security issues with authorization extensions/ja
 * Category:User rights extensions - 利用者権限管理を支援する拡張機能
 * Extension:Hidden pages
 * Extension:Page access restriction
 * コンフィギュレーション変数: $wgGroupPermissions, $wgAddGroups, $wgRemoveGroups
 * セキュリティが強化されたMediaWikiバージョン/サンプル インストレーション
 * GroupWikiBase
 * Extension:BizzWiki
 * セキュリティアラート
 * Security/ja - 問題を報告する、通知を受け取る方法
 * Template:Security alert/ja
 * Template:XSS alert
 * Category:Extensions with XSS vulnerabilities
 * 技術的な詳細内容
 * データベーススキーマ: User groups table、User table、Revision table、Recentchanges table
 * フック: UserLoginForm, UserLoginComplete, UserLogout, UserLogoutComplete, UserEffectiveGroups, UserGetImplicitGroups, UserGetRights
 * コード: User.php
 * Manual:Special pages/ja - 特別ページに対するアクセス権限を設計するためのインストラクション
 * Open Web Application Security Project (OWASP)