¿Son las URL aleatorias una forma segura de proteger las fotos de perfil?

71

Me gustaría pasar de ID de usuario secuenciales a aleatorias, por lo que puedo alojar fotos de perfil públicamente, es decir, example.com/profilepics/asdf-1234-zxcv-7890.jpg .

¿Cuánto tiempo deben tener las ID de usuario para evitar que alguien encuentre fotos de usuarios para las que no se les ha proporcionado el enlace?

¿Las 16 letras en minúscula y de cero a nueve proporcionan una complejidad razonable? Basándome en 36 16 = 8x10 24 , estimo de manera conservadora que 10 mil millones de cuentas de usuarios reducen el espacio a 8x10 14 . A 1000 suposiciones / segundo, llevaría 25 000 años encontrar una cuenta. A menos que esté pasando por alto algo.

    
pregunta owenfi 18.05.2014 - 22:24
fuente

7 respuestas

71

Depende completamente de lo que quieras decir con "seguro".

Si su única preocupación es una URL de adivinación de un atacante, 16 alfanuméricos proporcionan aproximadamente 8,000,000,000,000,000,000,000 de direcciones posibles, lo que es suficiente para detener las adivinanzas aleatorias, para que un atacante tenga un 50% de posibilidades de encontrar una sola imagen en un sitio con mil usuarios en un año, tendrían que realizar 100 trillones de intentos por segundo, tráfico suficiente para reducir incluso algo como Amazon o Google.

Pero hay otras maneras de filtrar las URL: las personas las colocan en correos electrónicos o publicaciones de blogs, los rastreadores web encuentran páginas que no protegió de manera adecuada, etc. Si realmente necesita proteger algo, debe ponerlo detrás del mismo tipo de seguridad que el resto de su sitio web.

Personalmente, para hacer URL difíciles de adivinar, usaría GUID / UUID. El espacio de búsqueda es absurdamente enorme, no es necesario coordinar la generación entre varios servidores, y la mayoría de los idiomas tienen rutinas estándar para manejarlos.

    
respondido por el Mark 18.05.2014 - 23:33
fuente
24

Tal vez no sea la respuesta a su pregunta, pero si desea "ocultar" la ubicación de sus imágenes de perfil en un sitio web, simplemente puede incrustar la imagen como URI de datos. Puede codificar en base64 la imagen en su servidor e incrustar la cadena en su sitio web, en lugar de exponer cualquier ruta de imagen.

vea enlace y enlace para una descripción y demostración.

    
respondido por el iHaveacomputer 19.05.2014 - 03:02
fuente
22

Dado que ya has abierto Dropbox, creo que podemos dar al menos una razón por la que hacer esto es una mala idea:

Dropbox deshabilita Los viejos enlaces compartidos después de las declaraciones de impuestos terminan en Google

  

El defecto, que también aparece en Box, afecta a los archivos compartidos que contienen hipervínculos. "Los usuarios de Dropbox pueden compartir enlaces a cualquier archivo o carpeta en su Dropbox", señaló la compañía ayer mientras confirmaba la vulnerabilidad:

     
    

Los archivos compartidos a través de enlaces solo son accesibles para las personas que tienen el enlace. Sin embargo, los enlaces compartidos a documentos se pueden divulgar inadvertidamente a destinatarios involuntarios en el siguiente escenario:

         
  • Un usuario de Dropbox comparte un enlace a un documento que contiene un hipervínculo a un sitio web de un tercero.
  •     
  • El usuario, o un destinatario autorizado del enlace, hace clic en un hipervínculo del documento.
  •     
  • En ese momento, el encabezado del remitente revela el enlace compartido original al sitio web de terceros.
  •     
  • Alguien con acceso a ese encabezado, como el webmaster del sitio web de terceros, podría acceder al enlace al documento compartido.
  •     

Básicamente, es demasiado fácil para que las URL se filtren sin darse cuenta, teniendo en cuenta cuántos usuarios las usan. Si sus usuarios están informados sobre esto y evitan estos problemas, supongo que es razonablemente seguro, pero esa es una suposición importante.

    
respondido por el Voo 19.05.2014 - 16:56
fuente
11

Las otras respuestas son generalmente buenas, pero otra consideración es el transporte. Si está utilizando un protocolo http o cualquier otro protocolo no cifrado (o envía las URL por correo electrónico), todos los datos que transmita y reciba, incluidas estas URL, deben considerarse completamente públicos desde el punto de vista de la seguridad. Una gran parte (¿alguien tiene estadísticas?) De usuarios se encuentran en puntos de acceso wifi públicos sin cifrado y el raspado activo de imágenes / URL de dichas redes es común.

    
respondido por el R.. 19.05.2014 - 14:43
fuente
7

Como lo mencionaron otros, un URI para una imagen específica se filtrará tarde o temprano, sin importar qué tan larga o complicada sea. Si está dispuesto a restringir la visualización a los usuarios que han iniciado sesión, puede usar, por ejemplo, .../image/profile.php?u=12345 para mostrar la imagen del usuario 12345 sin un URI directo a la foto que está disponible para pasar al público en general . Se supone que las personas aleatorias (no registradas) no obtendrían nada de nuevo de profile.php. Tenga en cuenta que nada impide que un usuario que ha iniciado sesión guarde esa imagen (especialmente si está almacenada en caché) y la pase. Hay cosas que se pueden hacer con los encabezados de control de caché, etc., o poner la imagen en Flash, o lo que sea, pero si una imagen se puede ver en el navegador de alguien, con suficiente trabajo será posible capturarla y guardarla.

    
respondido por el Phil Perry 19.05.2014 - 19:27
fuente
5

El problema con su esquema es que los numerosos usuarios de sus URL probablemente no todos adivinarán que contienen información confidencial. Y parte de ese problema es que probablemente no tienes idea de cuán grande es la base de usuarios; para estas URL, los usuarios incluyen

  1. Las personas que consideras usuarios.

  2. Sus complementos / complementos / extensiones de navegador.

  3. Casi cualquier contenido de terceros en su sitio (anuncios, análisis, complementos sociales, ...) informará a terceros de las URL en cuestión.

  4. Sitios web aparentemente aleatorios que ven la URL como la URL de referencia (¿realmente sabes qué enlaces extra curiosos evocan tus usuarios en tu sitio web a través de complementos del navegador?).

La evidencia empírica es que las URL de solo https anunciadas como equivalentes de contraseña se indexan en Google, por ejemplo, repetidamente, por ejemplo. en el caso de la billetera en línea de Bitcoin sin contraseña Instawallet (tenga en cuenta que han quebrado tanto por esto que ni siquiera se pueden permitir un certificado SSL válido ya).

    
respondido por el pyramids 20.05.2014 - 17:11
fuente
2

Agregando un par de puntos importantes, ya que todos los que respondieron arriba parecen haberse perdido algunos de ellos.

  1. La probabilidad de exponer inadvertidamente una URL es mayor que la de una contraseña, ya que las personas saben que la contraseña es confidencial.
  2. Los sitios web similares a Facebook utilizan URL de CDN que son tan complejas que nadie puede adivinar, pero sin embargo, desde un punto de vista de seguridad, parecen ser riesgosas, ya que la revocación del acceso es imposible cuando el usuario cambia la configuración de privacidad. Algunos sitios web, incluidos los que cuentan con el servicio s3 de Amazon en el backend, usan una URL firmada con una marca de tiempo que se validará periódicamente.
  3. Google Cache! Es probable que los motores de búsqueda rastreen las imágenes supuestamente privadas. Realice una búsqueda con dorks que traería solo los resultados de los CDN de Facebook y se sorprenderá.
respondido por el hax 16.10.2016 - 16:13
fuente

Lea otras preguntas en las etiquetas