J'ai un cas d'utilisation très spécifique où le site conçu pour un avocat et chacun de ses clients peut se connecter à sa propre `` page / portail spécifique '' (type de publication personnalisé) sans avoir accès à wp-admin, etc. (j'ai créé tous les pages de connexion / enregistrement / modification de profil dans le frontal). Dans cette page / portail, l'avocat laissera des messages et des fichiers à télécharger par le client , maintenant théoriquement, un client peut deviner (ou s'il a connaissance des fichiers d'un autre client) d'autres noms de fichiers et télécharger, créant ainsi un problème de confidentialité / sécurité / matériel confidentiel, etc.
Je suis à la recherche d'idées / concepts pour une solution, ma pensée initiale était d'avoir le lien de téléchargement vers un fichier download.php envoyant l'ID de pièce jointe, l'ID utilisateur, l'ID de page / portail et nonce et le traitement de l'autre côté. .
Qu'est-ce que tu penses? suis-je sur la bonne voie ou cette approche est-elle défectueuse?
Merci!
Réponses:
Ce qui doit arriver, c'est que vous devez proxy des demandes de téléchargement pour les types de fichiers que vous souhaitez via WordPress. Supposons que vous allez restreindre l'accès aux fichiers ".doc".
1. Définissez une variable de requête qui indique le fichier demandé
2. Mettez à jour .htaccess pour transférer les demandes de fichiers restreints vers WordPress
Cela capturera les demandes des fichiers que vous souhaitez restreindre et les renverra à WordPress en utilisant la variable de requête personnalisée ci-dessus. Insérez la règle suivante avant les
RewriteCond
lignes.3. Capturez le nom de fichier demandé dans une variable de requête personnalisée; et vérifiez l'accès au fichier:
NB Cette solution fonctionne uniquement pour les installations sur site unique ! En effet, WordPress MU transfère déjà les demandes de fichiers téléchargées dans les sous-sites via
wp-includes/ms-files.php
. Il existe également une solution pour WordPress MU, mais elle est un peu plus impliquée.la source
intercept_file_request
ou qui est appelée n'importe où, comment cette fonction est-elle déclenchée?wp
, j'ai mis à jour l'exemple.J'ai récemment eu un problème connexe et j'ai écrit cet article à ce sujet .
Je suppose que les téléchargements sont téléchargés via la gestion des médias de WordPress - ou sinon vous avez un ID de pièce jointe pour le téléchargement.
Aperçu de la solution
.htaccess
pour bloquer toute tentative d'accéder directement aux fichiers dans le répertoire de téléchargement (ou un sous-répertoire de celui-ci) - par exemple viamysite.com/wp-content/uploads/conf/2012/09/myconfidentialfile.pdf
)Avertissements
.htaccess
garantir la sécurité . Si ce n'est pas disponible / activé (serveurs nginx par exemple), vous n'obtiendrez pas beaucoup de sécurité. Vous pouvez empêcher l'utilisateur de parcourir le répertoire uplods. Mais l'accès direct fonctionnera.Bloquer l'accès direct
Pour ce faire, dans votre dossier de téléchargements (ou dans un sous-dossier - tous les documents confidentiels doivent résider, à n'importe quelle profondeur, à l'intérieur de ce dossier). Placez un
.htaccess
fichier avec les éléments suivants:Dans ce qui suit, je suppose que vous joindrez des documents confidentiels au type de message «client». Tout média téléchargé sur la page de modification du client sera stocké dans le
uploads/conf/
dossierLa fonction pour configurer le répertoire des téléchargements protégés
Téléchargement de documents confidentiels
Cela dit, le contenu téléchargé devrait être à l'intérieur
uploads/conf
et essayer d'y accéder directement à l'aide de votre navigateur ne devrait pas fonctionner.Téléchargement de contenu
C'est facile. L'URL de téléchargement peut être quelque chose
www.site.com?wpse26342download=5
(où 5 est l'ID de pièce jointe du contenu téléchargé). Nous l'utilisons pour identifier la pièce jointe, vérifier les autorisations de l'utilisateur actuel et lui permettre de télécharger.Tout d'abord, configurez la variable de requête
Maintenant, configurez un écouteur pour (peut-être) déclencher le téléchargement ...
Commentaires finaux
Le code ci-dessus peut contenir des bugs / erreurs de syntaxe et n'est pas testé, et vous l'utilisez à vos risques et périls :).
L'URL de téléchargement peut être «améliorée» à l'aide de réécritures. Comme indiqué dans les commentaires, vous pouvez ajouter un espace vide à l'
index.php
intérieur de chaque enfant du dossier protégé pour empêcher la navigation - mais cela devrait être empêché par les.htaccess
règles de toute façon.Une méthode plus sûre serait de stocker les fichiers publics en dehors d'un répertoire public. Ou sur un service externe comme Amazon S3. Pour ce dernier, vous devrez générer une URL valide pour récupérer le fichier sur Amazon (en utilisant votre clé privée). Ces deux éléments nécessitent un certain niveau de confiance dans votre service hôte / tiers.
Je me méfierais de l'utilisation de plug-ins suggérant qu'ils offrent des «téléchargements protégés». Je n'en ai trouvé aucun qui offre une sécurité suffisante. Veuillez également ne pas mettre en garde contre cette solution - et j'accueillerais volontiers toutes suggestions ou critiques.
la source
Probablement, vous avez peut-être connu cette astuce, ce code vérifiera le nom d'utilisateur de l'utilisateur actuellement connecté et s'il correspond, il affichera le lien de téléchargement vers ce fichier, sinon il n'affichera rien.
voici le code:
Cependant, ce ne sera pas une bonne approche, car les fichiers sont stockés sur des serveurs, toute personne disposant d'un lien peut télécharger ce fichier.
la source
Je présume que ces informations sont confidentielles et, par conséquent, en plus de masquer les liens vers les fichiers, vous souhaiterez les rendre complètement inaccessibles à quiconque sur le Web, même s'ils devaient deviner l'URL, sauf si cet utilisateur a l'autorisation explicite de télécharger les fichiers.
Cherchez à stocker les fichiers sur Amazon S3 en toute sécurité, puis à fournir des URL pré-signées (limitées dans le temps) au fichier à condition que les contrôles de sécurité corrects aient été satisfaits (c'est-à-dire que l'utilisateur s'est connecté à votre site et qu'il est bien celui qu'il prétend être).
Il existe un très bon SDK AWS qui permet de le faire très simplement.
Ce que vous devrez rechercher est de savoir comment envoyer des fichiers téléchargés via l'interface de téléchargement WP dans S3 à la place, sinon créez votre propre téléchargeur .
Une autre option serait de trop regarder dans le code de WP e-commerce . Ils offrent un téléchargement sécurisé de fichiers logiciels (par exemple MP3). Je crois que les fichiers sont convertis en hachages avec une clé de cryptage générée par utilisateur lors de l'achat. Cela prendrait un peu de décryptage pour voir comment cela fonctionnait, mais le processus ne sera pas unique à ce plugin, donc d'autres exemples seront disponibles (quelque part).
la source
Je pense que le cryptage des fichiers est la voie à suivre comme la réponse ci-dessus. Il existe un plugin sur Wordpress.org qui vous permet de protéger les téléchargements. http://wordpress.org/extend/plugins/download-protect/ Vous pouvez également utiliser le service Amazon ou Google Drive. Il existe de nombreux services proposant également des téléchargements protégés, tels qu'une boîte de dépôt.
la source