Tengo un caso de uso muy específico en el que el sitio creado para un abogado y cada uno de sus clientes pueden iniciar sesión en su propia "página / portal específico" (tipo de publicación personalizada) sin la capacidad de acceder a wp-admin, etc. (Creé todos los páginas de inicio de sesión / registro / edición de perfil en el front-end). En esta página / portal, el abogado dejará mensajes y archivos para que el cliente los descargue , ahora teóricamente hablando, un cliente puede adivinar (o si tiene conocimiento de los archivos de otro cliente) otros nombres de archivos y descargarlos, creando así un problema con la privacidad / seguridad / material confidencial, etc.
Estoy buscando ideas / conceptos para una solución, mi pensamiento inicial fue que el enlace de descarga apuntara a algún download.php enviando la identificación del archivo adjunto, la identificación del usuario, la identificación de la página / portal y nonce y, por otro lado, procesar eso. .
¿Qué piensas? ¿Estoy en el camino correcto o este enfoque es defectuoso?
¡Gracias!
Respuestas:
Lo que debe suceder es que debe enviar solicitudes de descarga de proxy para los tipos de archivos que desea a través de WordPress. Supongamos que va a restringir el acceso a los archivos ".doc".
1. Defina una variable de consulta que indique el archivo solicitado
2. Actualice .htaccess para reenviar solicitudes de archivos restringidos a WordPress
Esto capturará las solicitudes a los archivos que desea restringir y las enviará de vuelta a WordPress utilizando la variable de consulta personalizada anterior. Inserte la siguiente regla antes de las
RewriteCond
líneas.3. Capture el nombre del archivo solicitado en la variable de consulta personalizada; y verifique el acceso al archivo:
Nota: ¡ Esta solución funciona solo para instalaciones de un solo sitio ! Esto se debe a que WordPress MU ya reenvía solicitudes de archivos cargados en subsitios a través de
wp-includes/ms-files.php
. También hay una solución para WordPress MU, pero es un poco más complicada.fuente
intercept_file_request
o que se llame a alguna parte, ¿cómo se activa esa función?wp
, he actualizado el ejemplo.Recientemente tuve un problema relacionado y escribí este artículo al respecto .
Asumiré que las descargas se cargan a través del manejo de medios de WordPress, o de lo contrario tiene una ID de archivo adjunto para la descarga.
Esquema de la solución
.htaccess
de bloquear cualquier intento de acceso de los archivos directamente en el directorio de archivos (o un subdirectorio del mismo) - por ejemplo, a través demysite.com/wp-content/uploads/conf/2012/09/myconfidentialfile.pdf
)Advertencias
.htaccess
para proporcionar seguridad . Si esto no está disponible / activado (servidores nginx, por ejemplo), entonces no obtendrá mucha seguridad. Puede evitar que el usuario explore el directorio uplods. Pero el acceso directo funcionará.Bloqueo de acceso directo
Para hacer esto en su carpeta de cargas (o una subcarpeta, todo el material confidencial debe residir, a cualquier profundidad, dentro de esta carpeta). Coloque un
.htaccess
archivo con lo siguiente:A continuación, supongo que adjuntará material confidencial para publicar el tipo 'cliente'. Cualquier medio cargado en la página de edición del cliente se almacenará en la
uploads/conf/
carpetaLa función para configurar el directorio de cargas protegidas
Subir material confidencial
Una vez hecho esto, el contenido cargado debería estar dentro
uploads/conf
y no debería funcionar intentar acceder directamente a él utilizando su navegador.Descargando contenido
Esto es facil. La URL de descarga puede ser algo
www.site.com?wpse26342download=5
(donde 5 es la ID de archivo adjunto del contenido cargado). Usamos esto para identificar el archivo adjunto, verificar los permisos del usuario actual y permitir que se descarguen.Primero, configure la variable de consulta
Ahora configure un oyente para (quizás) activar la descarga ...
Comentarios finales
El código anterior puede contener errores / errores de sintaxis y no se ha probado, y lo usa bajo su propio riesgo :).
La URL de descarga se puede 'prettificar' usando reescrituras. Como se indica en los comentarios, puede agregar un espacio
index.php
en blanco dentro de cada elemento secundario de la carpeta protegida para evitar la exploración, pero esto debería evitarse de.htaccess
todas formas.Un método más seguro sería almacenar los archivos públicos fuera de un directorio público. O en un servicio externo como Amazon S3. Para esto último, deberá generar una URL válida para recuperar el archivo de Amazon (utilizando su clave privada). Ambos requieren un cierto nivel de confianza en su servicio de Host / tercero.
Sería cauteloso sobre el uso de complementos que sugieran que ofrecen 'descargas protegidas'. No he encontrado ninguno que brinde suficiente seguridad. Por favor, no las advertencias de esta solución también, y agradecería cualquier sugerencia o crítica.
fuente
Probablemente, es posible que haya conocido este truco. Este código verificará el nombre de usuario actual del usuario conectado y si coincide, mostrará el enlace de descarga a ese archivo, de lo contrario no mostrará nada.
Aquí está el código:
Sin embargo, este no será un buen enfoque, ya que los archivos se almacenan en servidores, cualquier persona con enlace puede descargar ese archivo.
fuente
Supongo que esta información es confidencial y, por lo tanto, además de ocultar los enlaces a los archivos, querrá hacerlos completamente inaccesibles para cualquier persona en la web, incluso si adivinaran la URL, a menos que el usuario tenga permiso explícito para descargar Los archivos.
Busque almacenar los archivos en Amazon S3 de forma segura y luego proporcione URL pre-firmadas (tiempo limitado) al archivo siempre que se hayan satisfecho las comprobaciones de seguridad correctas (es decir, el usuario ha iniciado sesión en su sitio y es quien dice ser).
Hay un muy buen AWS SDK que hace que sea muy sencillo hacer esto.
Lo que necesitará investigar es cómo enviar archivos cargados a través de la interfaz de carga de WP a S3 en su lugar, alternativamente, cree su propio cargador .
Otra opción sería mirar el código del comercio electrónico de WP . Ofrecen descargas seguras de archivos de software (por ejemplo, MP3). Creo que los archivos se convierten en hashes con una clave de cifrado que se genera por usuario en la compra. Esto llevaría un poco de descifrado para ver cómo funcionaba, pero el proceso no será exclusivo de este complemento, por lo que habrá otros ejemplos disponibles (en algún lugar).
fuente
Creo que el cifrado de los archivos es el camino a seguir como la respuesta anterior. Hay un complemento en Wordpress.org que le permite proteger las descargas. http://wordpress.org/extend/plugins/download-protect/ También podría usar el servicio amazons o google drive. Hay muchos servicios que ofrecen descargas protegidas, como Drop Box también.
fuente