Comment protéger les téléchargements, si l'utilisateur n'est pas connecté?
-
-
Une raisonpour laquelle vousne pouvezpas utiliser un répertoire detéléchargement différent,comme un autreen dehors de la racine du site?Any reason why you can't use a different upload directory, like one outside of the site root?
- 1
- 2011-12-22
- onetrickpony
-
Pas vraiment,maisj'ai déjà destonnes defichiers attachés auxmessages dans ce répertoire,celane me dérangepas deme déplacer sije peuxtrouver une solution appropriéeNot really but i already got tons of files attached to posts in that directory, i dont mind on moving all around if i can find a proper solution
- 0
- 2011-12-22
- chifliiiii
-
Si vous redirigez automatiquement les utilisateurs vers l'écran de connexion,unmoyen simple deprotéger lestéléchargements consiste à vérifier le référent.Si le référentest vide (accès direct) ou différent du domaine dans lequel vous hébergez lesfichiers,vous lebloquez.In case you auto redirect users to login screen, one easy way to protect uploads is to check for referrer. If the referrer is empty (direct access) or different than the domain you host the files, then you block it.
- 0
- 2020-01-31
- Konstantinos
-
2 réponses
- votes
-
- 2012-01-02
Vérifier seulement si le cookieexisten'estpas vraiment uneprotection stricte.
Pour obtenir uneprotection renforcée,vouspouveztransmettre ou "proxy"toutes les requêtes vers le dossiertéléchargé (exemples de
uploads
dans l'exemple suivant) via un scriptphp:RewriteCond %{REQUEST_FILENAME} -s RewriteRule ^wp-content/uploads/(.*)$ dl-file.php?file=$1 [QSA,L]
Toutes les demandes defichierstéléchargés (quiincluent desimages dans lesmessages)iraient à
dl-file.php
quipeut alors vérifier si l'utilisateurest connecté ounon.Si l'utilisateurn'estpas connecté,leformulaire de connexion de votre site sera affiché. Unefois que l'utilisateur s'est connecté,il sera redirigé vers lefichieret pourra letéléchargermaintenant.
Quelque chose de similairepeut êtretrouvé dans
\wp-includes\ms-files.php
dans votreinstallation wordpress,mais celui-ciestpour lemultisiteet sans vérification de connexionet redirection.Enfonction dutrafic dont vous disposez,ilpeut êtrejudicieux demieux l'intégrer à votre serveur,parexemple En-têtes
X-Accel-Redirect
ouX-Sendfile
.Only checking if the cookie exists, is not much of a strict protection.
To get a stronger protection, you can pass or "proxy" all requests to the uploaded folder (exemplary
uploads
in the following example) through a php script:RewriteCond %{REQUEST_FILENAME} -s RewriteRule ^wp-content/uploads/(.*)$ dl-file.php?file=$1 [QSA,L]
All requests to uploaded files (which includes images in posts) would go to
dl-file.php
which then can do verify if the user is logged in or not.If the user is not logged in, your sites login-form will be shown. After the user logged in, she will get redirected back to the file and can download it now.
Something similar can be found in
\wp-includes\ms-files.php
in your wordpress installation, but that one is for multisite and w/o the login check and redirects.Depending on how much traffic you have, it could be wise to better integrate this with your server, e.g.
X-Accel-Redirect
orX-Sendfile
headers.-
C'est la seule solution vraiment sécurisée.Tout ce que vouspouveztrouver sur le Web,comme vérifier l'en-tête du référent,vérifier les cookies,interdire la liste des répertoires,est une demi-mesurepuisque vouspouvezfacilement usurper lesen-têtes de requêtes HTTPpour le contourner.This is the only really secure solution. Anything else you can find on the web, like checking referer header, checking cookies, disallow directory listing, is a half measure since you can easily spoof HTTP requests headers to get around it.
- 0
- 2013-09-20
- Luke
-
Lesgars ... celam'a semblé être la solutionparfaite ... leproblèmeest quej'utilise PDFJS de Mozillapour accéder à certainsfichiers PDF àpartir du dossier detéléchargement,et PDFJS utilise desen-têtes à contenupartielpour obtenir uniquement lespages qui l'intéressent..so cette solutionest unnon-goerpourmoi. Aucune suggestion??Guys..this seemed like the perfect solution for me....problem is, I am using PDFJS from Mozilla to access some PDFs from upload folder, and PDFJS uses partial-content headers to get only the pages it is interested in...so this solution is a no goer for me. any suggestions??
- 0
- 2014-11-28
- Otto Nascarella
-
@OttoNascarella: Les demandes de contenupartiel à PHP ont été résolues àpartir d'aujourd'hui,ceciestindépendant de cette question wordpress.Enfait,la questionest déjà assez ancienne: [Téléchargements avec reprise lorsque vous utilisez PHPpourenvoyer lefichier?] (Http://stackoverflow.com/q/157318/367456)@OttoNascarella: Partial Content requests to PHP have been solved as of today, this is independent to this wordpress question. Infact, the question is pretty old already: [Resumable downloads when using PHP to send the file?](http://stackoverflow.com/q/157318/367456)
- 0
- 2014-12-05
- hakre
-
@hakre Qu'enest-il de certaines de cesimages utilisées sur lapremièrepage du site Webet detout utilisateur venant visiter le site? Celame donne uneerreur 404 sije ne suispas connecté.@hakre What about some of those image used on front page of website and any user come to visit site? It gives me 404 error if I am not loggedin.
- 0
- 2018-05-01
- Dhaval Panchal
-
Quelqu'unpourrait-ilexpliquer cette ligne de code `list ($basedir)=array_values (array_intersect_key (wp_upload_dir (),array ('basedir'=> 1))) + array (NULL);`et en quoi c'est différent de `$basedir=wp_upload_dir () ['basedir'] `Could someone please explain this line of code `list($basedir) = array_values(array_intersect_key(wp_upload_dir(), array('basedir' => 1)))+array(NULL);` and how it's different from `$basedir = wp_upload_dir()['basedir']`
- 0
- 2020-04-02
- Tomas Eklund
-
@TomasEklund: Le vôtreestprobablementmoins compliqué.Une des raisons de l'originalesttrèsprobablement la compatibilité des versions PHP avec les versions antérieures.@TomasEklund: Your's most likely is less complicated. A reason for the original one is most likely PHP backwards version compatibility.
- 0
- 2020-04-04
- hakre
-
Génial.Quelqu'unpeut-il s'il vousplaîtfaire de cette solution unplugin wordpress?Great. Can anyone please make this solution a wordpress plugin?
- 0
- 2020-05-17
- Jian Chen
-
- 2017-04-13
Si vous souhaitez une approchebasée sur unpluginpour résoudre ceproblème,voici une solution raisonnablementbonne quej'ai (enfin)trouvée:
- Installez leplugin 'Download Monitor',disponible sur:
https://wordpress.org/plugins/download-monitor/ - Dans letableau debord WordPress,accédez aunouvel élément demenu 'Téléchargements'et ajoutez unnouveau 'Télécharger',comme décrit dans la documentation duplugin
site Webici: https://www.download-monitor.com/kb/adding-téléchargements/.
Preneznote du shortcode 'Télécharger' qui vousestfourni (parexemple,enregistrer dans
Bloc-notes). Notez que lefichierestenregistré dans
/wp-content/uploads/dlm_uploads/
- Dans lamétabox 'Options detéléchargement',spécifiez 'Membres uniquement' (commeindiquéici https://www.download-monitor.com/kb/download-options/),et cliquez sur «Publier».
- Sur lapage sur laquelle vous souhaitez que letéléchargement réservé auxmembres s'affiche,ajoutez le shortcode dont vous avezprisnote à l'étape 2et «Publiez/Mettez àjour» lapage,commeindiquéici: https://www.download-monitor.com/kb/shortcode-download/. Vouspouvezmodifier lemodèle de lien detéléchargement comme décritici https://www.download-monitor .com/kb/content-templates/,ou créez le vôtre (parexemplepour supprimer lenombre detéléchargements)
- Accédez à votrepage,vous devriez voir un lien detéléchargement (mais quine révèlepas l'URL dufichier detéléchargement). Si vous accédez à lamêmepage dans unenouvellefenêtre denavigateur (ou unefenêtre denavigationprivée),vous devriez constater que letéléchargementne fonctionneplus.
Cela signifie quetoutepersonnenon connectéene peutni télécharger lefichierni voir la véritable URL dufichier. Si dans le cas où unepersonnenon autoriséetrouve l'URL dufichier,leplugin arrête également les utilisateurs denaviguer vers l'URL dufichier réelen bloquant l'accès au dossier
/wp-content/uploads/dlm_uploads/
.Bonus: si vousfaites celapour un site où vous avezbesoin que les utilisateurspuissent se connecteren tant que 'Membres' uniquement (maisn'ontpas d'autorisations WordPress comme l'édition depage ou être un administrateur),installez leplugin 'Membres' https://wordpress.org/plugins/members/,créez unnouveau rôle utilisateur appelé 'Membre',et donnez-lui la capacité unique de `` lire '',créez unnouvel utilisateur dans WordPresset assurez-vous de lui donner un rôle de ``membre ''.
Si vous souhaitezprotéger le contenu despages,leplugin 'Members'fournit des options,ouilexiste d'autresplugins. Si vous souhaitez que lapage de connexion desmembres ait unmeilleurthème que leformulaire de connexionpar défaut de WordPress,utilisez quelque chose comme "Thème My Login": https://wordpress.org/plugins/theme-my-login/
If you would like a plugin-based approach to solving this problem, here is a reasonably good solution that I have (finally) found:
- Install the plugin 'Download Monitor', available at:
https://wordpress.org/plugins/download-monitor/ - In the WordPress Dashboard, go to the new 'Downloads' menu item and add a new 'Download', as described on the plugin documentation
website here: https://www.download-monitor.com/kb/adding-downloads/.
Take note of the 'Download' shortcode provided for you (eg. save to
Notepad). Note that the file gets saved in
/wp-content/uploads/dlm_uploads/
- In the 'Download options' metabox, specify 'Members only' (as documented here https://www.download-monitor.com/kb/download-options/), and click 'Publish'.
- On the page that you want the Members only download to appear, add in the shortcode you took note of in step #2, and 'Publish/Update' the page, as documented here: https://www.download-monitor.com/kb/shortcode-download/. You can change the download link template as described here https://www.download-monitor.com/kb/content-templates/, or create your own (eg. to remove the Download 'count')
- Browse to your page, you should see a download link (but which does not reveal the URL to the download file). If you browse to the same page in a new browser window (or Incognito window), you should find that the download no longer works.
This means that anyone not logged in cannot either download the file or see the real URL to the file. If in the event that someone unauthorised figures out the URL to the file, the plugin also stops users browsing to the real file URL by blocking access to the
/wp-content/uploads/dlm_uploads/
folder.Bonus: if you a doing this for a site where you need users to be able to login as 'Members' only (but have no WordPress permissions like page editing or being an Admin), install the 'Members' plugin https://wordpress.org/plugins/members/, create a new user role called 'Member', and give it the single capability of 'read', create a new User in WordPress, and make sure to give them a role of 'Member'.
If you want protect the content of pages, the 'Members' plugin provides some options, or there are other plugins out there. If you want to theme the login page for Members to look better than the WordPress default login form, use something like 'Theme My Login': https://wordpress.org/plugins/theme-my-login/
-
Leprocessus quej'ai décrit ci-dessusest égalementexpliquéici,bien que comme vouspouvez le voir,ilne doitpas être spécifique auxfichiers PDF uniquement: http://www.thedigitalcrowd.com/website-development/wordpress/wordpress-restrict-access-téléchargements-pdf-avec-informations-de-connexion-membres-privés/The process I have described above is also explained here, although as you can see it doesn't have to be specific to just PDFs: http://www.thedigitalcrowd.com/website-development/wordpress/wordpress-restrict-access-to-pdf-downloads-with-private-members-login-details/
- 0
- 2017-04-13
- Matty J
J'utilise WordPresspour un siteprivé où les utilisateurstéléchargent desfichiers. J'utilise le "WordPressprivé"pourempêcher l'accès au site si l'utilisateurn'estpas connecté.
Je voudraisfaire demêmepour lesfichierstéléchargés dans le dossier uploads.
Donc,si un utilisateurn'estpas connecté,ilne pourrapas accéder à: https://xxxxxxx.com/wp-content/uploads/2011/12/xxxxxxx.pdf s'ilsessaient d'accédermaisne sontpas connectés,ils doivent être redirigés vers lapage de connexionparexemple.
J'aitrouvé unplugin appeléfichiersprivésmais la dernièremise àjour remonte à 2009et ilne semblepasfonctionner surmon WordPress.
Quelqu'un connaît uneméthode? Laméthode hotlinking suffira-t-elle àprotéger cela?
J'ai égalementtrouvé cetteméthode:
Mais alorstout utilisateur qui réplique le cookiepourraitpasser ce droit? Cordialement