¿Cómo restringir el acceso a archivos subidos?

4 abr 2011, 13:30:20
Vistas: 27.7K
Votos: 12

Tengo un área restringida en un sitio web que solo puede ser accedida por usuarios registrados. Para eso creé una plantilla de página con una condición 'current_user_can()'.

Mi problema es que los documentos adjuntos a las páginas restringidas siguen siendo accesibles para cualquiera si se coloca la ruta completa en la barra de direcciones del navegador.

¿Hay alguna manera de restringir el acceso a los archivos subidos?

EDICIÓN: Quiero aclarar que los archivos deberían ser accesibles solo para usuarios que hayan iniciado sesión.

0
Todas las respuestas a la pregunta 5
8

Esto no es realmente una pregunta sobre WordPress, pero puedes agregar una regla de reescritura para evitar el acceso a menos que el referente sea tu propio dominio.

[Actualización]

Necesitarás hacer 2 cosas:

  1. Agregar una regla de reescritura (ya sea directamente con .htaccess o usando WP_rewrite (referencia del Codex). El objetivo aquí es denegar solicitudes a tus documentos que no tengan tu dominio como referente - esto evita que la gente pegue el enlace directamente en la barra de direcciones del navegador.

  2. Envolver tus enlaces de descarga en un bloque condicional is_user_logged_in (referencia del Codex) - de esa manera solo aparecerán en la página si el usuario ha iniciado sesión.

Hay un ejemplo de código disponible en una pregunta relacionada:

4 abr 2011 14:06:02
Comentarios

Hola anu, el referente debe ser mi dominio + el visitante debe ser un usuario registrado y conectado. Creo que es un asunto de WP.

mike23 mike23
4 abr 2011 15:16:03

Parece una pregunta sobre htaccess para mí.

curtismchale curtismchale
4 abr 2011 17:49:26

Actualizaré mi respuesta

anu anu
4 abr 2011 19:41:05

Hola anu, sí, eso no muestra los archivos si un usuario no ha iniciado sesión, pero ¿qué pasa si un usuario adivina el nombre del archivo? ¡Aún puede acceder a él! Y eso es lo que quiero evitar. Permíteme darte un ejemplo, digamos que tenemos un sitio web corporativo con algunos documentos públicos (report2011.pdf, report2010.pdf, etc.) y algunos documentos privados (report2009.pdf, report2008.pdf). Incluso si los documentos privados no se muestran en el sitio web público, alguien podría adivinar fácilmente algunos nombres de archivo (basándose en la estructura de los públicos) y así acceder a los documentos privados simplemente escribiendo la URL en la barra de direcciones.

mike23 mike23
7 abr 2011 17:35:39

Eso es lo que la regla de reescritura evita

anu anu
7 abr 2011 19:39:47

¿Funcionará si no tengo un dominio como tal...? Es decir, ¿estoy accediendo a mi blog a través de una dirección IP?

user3047 user3047
9 jun 2011 20:25:39

Dos palabras: suplantación de referer. Tu solución no es más que 'seguridad por oscuridad': El atacante no puede acceder al archivo multimedia si conoce la URL completa del mismo. En cambio, ahora tiene que conocer una de las URLs de referer válidas. ¿Qué hemos ganado aparte de una mayor complejidad administrativa? En mi humilde opinión, nada. En el momento de escribir esto, hay "miles" de plugins para proteger páginas y posts, pero Wordpress todavía carece de una protección útil para los medios. Los desarrolladores de Wordpress (y de plugins) evitan esto, ya que conocen las consecuencias.

User User
11 mar 2012 12:09:42

Es claramente una pregunta sobre Wordpress, aunque no haya una respuesta de Wordpress. Estamos casi en 2019 ahora. :(

bogl bogl
13 dic 2018 11:55:05
Mostrar los 3 comentarios restantes
1

Yo cambiaría el directorio de subida a uno fuera de la carpeta www. Luego "envías" el archivo usando una página "proxy". La página proxy verifica si el usuario está logueado y luego envía el archivo usando header()/readfile().

27 sept 2011 02:03:28
Comentarios

Sé que esto es viejo, pero ¿puedes construir una demostración?

klewis klewis
28 mar 2024 17:16:58
1

Puedes utilizar protección contra hot-linking usando tu servidor web preferido.

Consulta esta respuesta en StackOverflow:
https://stackoverflow.com/questions/1775582/apache-hotlink-protection-for-download-folder.

Esto utiliza el archivo .htaccess de apache2.

Básicamente, estás denegando la descarga si el usuario no proviene de una página de tu blog.

9 jun 2011 00:36:14
Comentarios

No tengo experiencia con esto... ¿alguna idea de qué debería poner en mi archivo .htaccess?

user3047 user3047
9 jun 2011 01:05:31
0

Esto funcionó para mí. Puedes prevenir el acceso a la carpeta wp-content/upload (excluyendo a los usuarios conectados) creando un archivo .htaccess y agregando la siguiente regla de reescritura:

# Deshabilitar navegación de directorios
Options -Indexes

# Redirigir usuarios no conectados a la página de inicio de sesión
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule \.(pdf|jpg)$ /wp-login.php [L,R=302]
21 sept 2023 09:03:49
2

El plugin de usuario registrado solo se asegura de que un visitante haya iniciado sesión antes de ver el contenido de tu página. El acceso a tus archivos a través de un navegador está controlado por el servidor.

Deberías probar el plugin de WP AskApache Password Protect - http://wordpress.org/extend/plugins/askapache-password-protect/

Por supuesto, esto solo funcionará si tu blog WordPress está alojado en un servidor Apache.

9 jun 2011 00:45:53
Comentarios

¿No estás seguro de cómo usar este plugin? ¿Alguna idea sobre qué opciones deberías elegir?

user3047 user3047
9 jun 2011 01:04:53

El plugin ya no está disponible. Ha sido cerrado debido a un problema de seguridad.

JakeParis JakeParis
16 jul 2024 23:52:31