web-dev-qa-db-fra.com

Comment protéger les téléchargements sur plusieurs sites si l'utilisateur n'est pas connecté?

J'essaie de configurer un intranet multisite (à l'aide de sous-domaines) où le contenu de chaque sous-site est uniquement accessible aux utilisateurs connectés à leur site respectif. Le problème que je rencontre est d’essayer de restreindre l’accès aux fichiers téléchargés (par exemple http://example.org/wp-content/uploads/2011/12/dummy.pdf ) uniquement pour les utilisateurs connectés.

Semblable à Comment protéger les téléchargements, si l'utilisateur n'est pas connecté? , comment activer l'une des solutions proposées par hakre ou Frank Bueltge pour un site multisite installation?

J'ai parcouru le net et Wordress Answers, mais je n'ai pas réussi à trouver quelque chose qui me permette de me mettre au travail. Les réponses associées sont:

De plus, je suis nouveau sur PHP et j'apprends toujours comment WordPress fonctionne sous le capot. Des informations détaillées sur ce que je dois faire et ce qui se passe là où serait très apprécié seraient également très appréciées.

Merci!

4
acdesigns

Bonne question!

En fouillant un peu, cela semble fonctionner (des tests supplémentaires et un look plus qualifié sont les bienvenus :). Testé uniquement dans une installation de développement localhost avec des sous-domaines. Pas de mappage de domaine.

Modifiez la règle de réécriture .htaccess suivante:

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

Faites une copie de /wp-includes/ms-files.php et placez-la sur la racine avec le nom dl-files.php.

Désactivez SHORTINIT, modifiez le chemin wp-load.php et ajoutez une vérification current_user_can() au tout début, de sorte qu'il devienne:

<?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 ... */

Notez que la suppression de SHORTINIT augmente le temps de chargement et la consommation de mémoire. Lisez quelque part qu'il pourrait s'agir d'une augmentation de dix fois (!?).

Discussions intéressantes dans wp-edu liste (vous n'avez rien trouvé dans wp-hackers):

2
brasofilo