web-dev-qa-db-ja.com

ユーザーがログインしていない場合にマルチサイトでアップロードを保護する方法

各サブサイトのコンテンツには、それぞれのサイトにログインしているユーザーしかアクセスできないマルチサイトイントラネット(サブドメインを使用)を設定しようとしています。私が抱えている問題は、アップロードされたファイルへのアクセスを制限しようとしていることです(例: http://example.org/wp-content/uploads/2011/12/dummy.pdf )ログインユーザーのみ。

ユーザーがログインしていない場合にアップロードを保護する方法 と同様に、hakreまたはFrank Bueltgeによって提案された解決策の1つをマルチサイト用に有効にする方法インストール?

私はネットとWordress Answersを精査してきましたが、うまくいくことができなかったのです。関連する回答は以下のとおりです。

また、私はPHPに慣れていないので、WordPressが内部でどのように機能するのかをまだ学習しています。

ありがとうございます。

4
acdesigns

いい質問ですね。

ちょっとそれを覗いて、これはうまくいっているようです(さらなるテストとより修飾された外観は大歓迎です):サブドメインを使用したlocalhost開発インストールでのみテスト済み。ドメインマッピングはありません。

次の.htaccess書き換えルールを変更します。

# uploaded files
# RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
RewriteRule ^files/(.+) dl-files.php?file=$1 [L]

/wp-includes/ms-files.phpのコピーを作成し、それをdl-files.phpという名前でルートに置きます。

SHORTINITを無効にし、wp-load.phpパスを修正し、最初にcurrent_user_can()チェックを追加すると、以下のようになります。

<?php
/**
 * Modified Multisite upload handler.
 *
 * @since 3.0.0
 *
 * @package WordPress
 * @subpackage Multisite
 */

//define( 'SHORTINIT', true );
require_once( 'wp-load.php' );

if( !is_multisite() )
    die( 'Multisite support not enabled' );

if( !current_user_can( 'subscriber' ) ) {
    status_header( 403 );
    die( '403 &#8212; Forbidden.' );
}

ms_file_constants();

/* ... rest of the original file ... */

SHORTINITを削除すると、ロード時間とメモリ消費量が増加することに注意してください。どこかで読んでください。これは10倍になる可能性があります(!?)。

で興味深い議論 wp-edu list(wp-hackersには何も見つかりませんでした):

2
brasofilo