Subidas Seguras

Añadido en la versión 2.4 de Discourse en febrero está la función de Cargas Seguras, que proporciona un mayor grado de seguridad para TODAS las cargas (imágenes, video, audio, texto, PDFs, ZIPs y otros) dentro de una instancia de Discourse.

Requisitos previos

Debes tener las cargas en S3 habilitadas en tu sitio, lo cual requiere que se completen los siguientes ajustes:

  • ID de clave de acceso de S3
  • Clave de acceso secreta de S3
  • Región de S3
  • Bucket de carga de S3

También debes estar utilizando un bucket de S3 que no tenga una política de bucket pública, y debes asegurarte de que todas las cargas existentes tengan una ACL de S3 de lectura pública. Consulta la sección “Habilitar Cargas Seguras” más abajo.

Una vez satisfechos estos requisitos previos, puedes habilitar el ajuste de sitio “cargas seguras”.

Habilitar Cargas Seguras

:dragon: :warning: AQUÍ HAY DRAGONES :warning: :dragon:

Esta es una función avanzada y el soporte fuera de nuestro nivel Enterprise será limitado como máximo. Solo habilita las cargas seguras si eres un usuario experto.


Para habilitar las cargas seguras, debes seguir estos pasos:

  1. Asegúrate de tener las cargas en S3 configuradas.
  2. Anota si tu bucket de S3 tiene una política de bucket pública. Si es así, se requiere un paso adicional (paso 4).
  3. Ejecuta la tarea rake uploads:sync_s3_acls. Esto asegurará que todas tus cargas tengan la ACL correcta en S3. Esto es importante; si realizas el paso 4 antes de hacer esto, algunas cargas podrían volverse inaccesibles en tu foro.
  4. Elimina la política de bucket pública de tu bucket si estaba presente en el paso 1.
  5. Habilita el ajuste de sitio “cargas seguras”. Opcionalmente, habilita el ajuste de sitio “prevenir que los anónimos descarguen archivos” para detener a los usuarios anónimos de descargar adjuntos de publicaciones públicas. Todas las cargas a partir de este momento podrían marcarse como seguras dependiendo de las condiciones siguientes.
  6. Si deseas que todas las cargas se analicen retroactivamente y posiblemente se marquen como seguras, ejecuta la tarea rake uploads:secure_upload_analyse_and_update.

:exclamation: Nota sobre la política del bucket S3 :exclamation:

Debes asegurarte de que el bucket al que estás cargando no tenga una política de bucket pública. Una política de bucket pública tendrá algo como esto:

{
    "Version": "2012-10-17",
    "Id": "ComputedBucketPolicy",
    "Statement": [
        {
            "Sid": "AllowWorldRead",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::your-bucket-name/*"
        }
    ]
}

La parte importante aquí es que estamos permitiendo que * cualquier persona * obtenga objetos, lo que significa que cualquiera puede descargar cualquier cosa en el bucket. Esta etiqueta también mostrará si la política es pública:

Los ajustes aquí no deben modificarse. La imagen muestra el estado ideal para la pestaña “Bloquear acceso público”:

Qué hace

Una vez que hayas habilitado las Cargas Seguras, cualquier archivo cargado a través del Composer se marcará como seguro o no seguro según los siguientes criterios:

  • Si tienes habilitado el ajuste de sitio “inicio de sesión requerido”, todas las cargas se marcarán como seguras, y los usuarios anónimos no podrán acceder a ellas.
  • Si estás cargando algo dentro de un Mensaje Personal, se marcará como seguro.
  • Si estás cargando algo dentro de un Tema que está dentro de una Categoría privada, se marcará como seguro.

La carga en S3 tendrá una ACL privada, por lo que los enlaces directos al archivo en S3 devolverán un error 403 de acceso denegado. Cualquier y todo acceso a las cargas seguras será a través de una URL firmada por S3. Sin embargo, esto estará oculto para tus usuarios; si una carga es segura, cualquier referencia a ella se realizará a través de la URL de Discourse /secure-uploads/.

Permisos y control de acceso

La URL /secure-uploads/ determinará si el usuario actual tiene permiso para acceder al medio y lo servirá si es así. Cuando se crea la carga, la publicación en la que aparece por primera vez se establecerá como su “publicación de control de acceso” y todos los permisos se basarán en esa publicación.

  • Si tienes habilitado el ajuste de sitio “inicio de sesión requerido”, los usuarios anónimos siempre recibirán un error 404 al acceder a la URL.
  • Si accedes a un medio cuya publicación de control de acceso es un Mensaje Personal, el usuario debe ser parte de ese tema de Mensaje Personal para acceder al medio; de lo contrario, el usuario recibirá un error 403.
  • Si accedes a un medio cuya publicación de control de acceso está dentro de un tema que está dentro de una Categoría privada, el usuario debe tener acceso a esa categoría para acceder al medio; de lo contrario, el usuario recibirá un error 403.

Copiar URLs de /secure-uploads/ entre Publicaciones y Temas no es aconsejable, ya que diferentes usuarios tendrán diferentes niveles de acceso dentro de tus foros de Discourse. Las nuevas cargas siempre deben crearse a través del Composer. Las Oneboxes y las imágenes con enlaces directos también respetarán las reglas de cargas seguras. Los ajustes de sitio, emojis y cargas de temas no se ven afectados por las cargas seguras, ya que deben ser públicos.

:warning: Si se elimina una publicación de control de acceso, la carga adjunta ya no será accesible. :warning:

Mover publicaciones con cargas seguras

Si mueves una “publicación de control de acceso” entre diferentes contextos de seguridad, la carga adjunta podría cambiar a segura o no segura. Estas son las situaciones que pueden cambiar la seguridad de una carga:

  • Cambiar la categoría de un tema. Recorrerá todas las publicaciones del tema y actualizará el estado de seguridad de las cargas en consecuencia.
  • Cambiar un tema entre ser un tema público y un mensaje personal. Hará lo mismo que arriba.
  • Mover publicaciones de un tema a otro tema nuevo o existente. Ejecutará lo mismo que arriba en el tema de destino.

Cargas seguras en correos electrónicos

La incrustación de imágenes seguras en correos electrónicos está habilitada de forma predeterminada. Puedes configurar estos ajustes de sitio para un control adicional:

  • secure_uploads_allow_embed_images_in_emails: Deshabilita esto para omitir las imágenes seguras en los correos electrónicos.
  • secure_uploads_max_email_embed_image_size_kb: El límite máximo para el tamaño de la imagen segura que incrustaremos, con un valor predeterminado de 1 MB, para que el correo electrónico no se vuelva demasiado grande. El máximo es 10 MB. Funciona junto con email_total_attachment_size_limit_kb.

Las imágenes seguras se agregarán como archivos adjuntos de correo electrónico y se incrustarán utilizando el formato de URL cid: porque el soporte de URL base64 en los clientes de correo electrónico aún es inestable.

Si no tienes habilitado secure_uploads_allow_embed_images_in_emails, o si las imágenes comienzan a exceder los límites de tamaño, esto es lo que verás en lugar de las imágenes seguras (también audio y video seguros que no se incrustan):

image

Clientes alojados

Por el momento, las cargas seguras están disponibles solo para nuestros clientes del plan Enterprise. Por favor, contáctanos para más detalles.

51 Me gusta
Files/Download Manager For Discourse
Prevent guests from watching images
Register to download
Need log the who downloaded attachments
S3 Bucket objects restricted access policy as per Discourses groups
Signed Google Cloud CDN URLs
Search engines and private messages?
How to make uploads available only to logged-in users
S3 Object Storage for uploads- possible to make private? (and CDN question)
Discourse jumps back 20 posts in post history when navigating to new topic
Discourse jumps back 20 posts in post history when navigating to new topic
Why run UpdatePostUploadsSecureStatus even when secure uploads is disabled?
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
Understanding Uploads, Images, and Attachments
Capacity planning / Resource requirements
Why you should use Discourse internally for your company/team instead of Slack (4 years use case)
Can't always select any category in composer
S3 Object Storage for uploads- possible to make private? (and CDN question)
Personal Message attachments accessible to unauthenticated users (missing auth check)
Potential Directory Traversal: /uploads/* allows cross-directory file access
S3 Storage with no Public access
Are the images published in the Staff category publicly visible?
Login Only - Does it actually stop all traffic access without login?
为啥我的七牛云s3附件上传成功后,论坛中无法加载出来?
How the media in the posts look like when secure uploads are enabled?
Remove images from emailed reply to forum
Files/Download Manager For Discourse
Topic replies invisible until topic owner decides to reveal them?
Securing private group/category resources
PDF embedding and reading help
Inline PDF Previews
Upload objects to private S3 is not working
Spammers using uploaded images in spam e-mails. Any advice how to resolve?
Secure Media Uploads breaks Category Logos
How to allow downloading images along with other user data (csv) from activity section?
Discourse 2.6.0.beta3 Release Notes
Lock Downloads in discourse
What’s the suggested method to use secure images?
Page Publishing
Errors on Exporting Data from Teams to Self Hosted Discourse on Digital Ocean