Uso wordpress para un sitio privado donde los usuarios cargan archivos. Utilizo el "WordPress privado" para evitar el acceso al sitio si el usuario no está conectado.
Me gustaría hacer lo mismo con los archivos cargados en la carpeta de cargas.
Por lo tanto, si un usuario no ha iniciado sesión, no podrá acceder a: https://xxxxxxx.com/wp-content/uploads/2011/12/xxxxxxx.pdf si intenta acceder pero no está registrado, entonces debería ser redirigido a la página de inicio de sesión, por ejemplo.
Encontré un complemento llamado archivos privados, pero la última vez que lo actualicé fue en 2009 y parece que no funciona en mi wordpress.
Alguien sabe algún método? ¿El método de hotlinking será suficiente para proteger esto?
También encontré este método:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^.*uploads/private/.*
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule . /index.php [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Pero entonces, ¿cualquier usuario que replique la cookie podría pasar esto bien? Saludos
fuente
Respuestas:
Solo verificar si la cookie existe, no es una protección estricta.
Para obtener una protección más sólida, puede pasar o "proxy" todas las solicitudes a la carpeta cargada (a modo de ejemplo
uploads
en el siguiente ejemplo) a través de un script php:Todas las solicitudes de archivos cargados (que incluye imágenes en publicaciones) irían a lo
dl-file.php
que luego se puede verificar si el usuario ha iniciado sesión o no.Si el usuario no ha iniciado sesión, se mostrará el formulario de inicio de sesión de su sitio. Después de que el usuario inicie sesión, será redirigida de nuevo al archivo y puede descargarlo ahora.
Ejemplar
dl-file.php
.Algo similar se puede encontrar en
\wp-includes\ms-files.php
su instalación de WordPress, pero esa es para múltiples sitios y sin la verificación de inicio de sesión y redireccionamientos.Dependiendo de la cantidad de tráfico que tenga, podría ser conveniente integrarlo mejor con su servidor, por ejemplo,
X-Accel-Redirect
oX-Sendfile
encabezados.fuente
También puede escribir un complemento utilizando el
init
gancho y el valor de obtención$_GET[ 'file' ];
. Si el usuario tiene este valor de obtención, ingrese a una función para verificar los derechos de acceso a los archivos: por ejemplo, con una casilla de verificación en una Meta Box.la función get_file ()
También puede agregar una URL personalizada para archivos a través del gancho
generate_rewrite_rules
fuente
Si desea un enfoque basado en complementos para resolver este problema, aquí hay una solución razonablemente buena que he encontrado (finalmente):
https://wordpress.org/plugins/download-monitor/
/wp-content/uploads/dlm_uploads/
Esto significa que cualquier persona que no haya iniciado sesión no puede descargar el archivo ni ver la URL real del archivo. Si en el caso de que alguien no autorizado descubra la URL del archivo, el complemento también impide que los usuarios naveguen hacia la URL del archivo real al bloquear el acceso a la
/wp-content/uploads/dlm_uploads/
carpeta.Bonificación: si está haciendo esto para un sitio donde necesita que los usuarios puedan iniciar sesión solo como 'Miembros' (pero no tienen permisos de WordPress como editar páginas o ser un Administrador), instale el complemento 'Miembros' https: // wordpress .org / plugins / members / , cree un nuevo rol de usuario llamado 'Miembro' y dele la capacidad única de 'leer', cree un nuevo Usuario en WordPress y asegúrese de asignarle un rol de 'Miembro'.
Si desea proteger el contenido de las páginas, el complemento 'Miembros' ofrece algunas opciones, o existen otros complementos disponibles. Si desea crear un tema en la página de inicio de sesión para que los Miembros se vean mejor que el formulario de inicio de sesión predeterminado de WordPress, use algo como 'Theme My Login': https://wordpress.org/plugins/theme-my-login/
fuente