Descargando un archivo en mi sitio web, con y sin un secreto. ¿Una habitación para mejorar? [duplicar]

0

Estoy intentando crear un sistema de descarga simple como parte de mi sitio web. ¿Hay algo inseguro en esta ruta?

 GET https://my_website.com/downloads?file_id=AAA&user_id=BBB&secret=CCC

Donde user_id y el código son opcionales para los archivos que se pueden descargar gratis. De lo contrario, después de un pago, genero un código / secreto único para un usuario y le proporciono un enlace.

¿Hay espacio para mejorar aquí? ¿Y hay vulnerabilidades?

No es solo una URL aleatoria

También habrá "fecha de caducidad" asociada a cada secreto.

    
pregunta Uji 18.10.2017 - 05:37
fuente

1 respuesta

1

Algunos pensamientos:

  1. las URL se registran y se recuerdan en todas partes (registros del servidor y del proxy, historial del navegador, rastreadores de búsqueda, etc.), por lo que, a menos que el enlace sea muy efímero (de corta duración), debe asumir que los enlaces se perderán y pueden no se puede utilizar para proporcionar un lote de seguridad. Si desea una autenticación real, debe establecer una cookie (de forma segura) y rechazar las solicitudes que no tengan el valor de cookie esperado, o transmitir los campos secretos en un cuerpo de POST, o de lo contrario mantener los secretos fuera de la URL.
  2. Obviamente, el ID de usuario y el secreto deben ser indiscutibles. Eso significa que deben ser largos y seguros al azar. Como regla general, apunte a al menos 128 bits de entropía; esto es más de lo que estrictamente necesita, pero es barato y puede ofrecer cierta protección contra las debilidades en otros lugares (aunque también puede que no).
  3. En realidad no estoy seguro de por qué te estás molestando con una identificación de usuario, aquí; a menos que el ID de usuario sea un identificador reutilizable del que el usuario obtiene valor por permanecer constante, también puede utilizar los secretos.
  4. El archivo ID , en lugar del archivo nombre , implica que en realidad no tiene nada que el usuario proporcione para ser utilizado directamente para crear una ruta en su sistema de archivos. Esto es bueno, correcto y apropiado. No puede, si puede ayudarlo, proporcionar una manera para que los usuarios especifiquen directamente los nombres de los archivos, ya que eso implica el riesgo de que los usuarios obtengan acceso a los archivos a los que no tuvo acceso.
  5. Es posible que desee crear un sistema de límite de tiempo, límite de uso o revocación para sus enlaces secretos. De lo contrario, una vez que se genera un enlace, seguirá siendo válido para siempre, incluso si desea que deje de funcionar (o el usuario desea que deje de funcionar, por ejemplo, porque se vincula con algo sensible / privado para el usuario, pero alguien tiene sus manos en él). el enlace).
  6. Si tiene que procesar pagos manualmente y generar enlaces, eso no escalará. Hacerlo de forma automática es totalmente posible, pero requiere mucho trabajo para que la gestión de pagos y la verificación sean seguras.
  7. Asegúrese de que está validando los parámetros de forma segura. Observe los ataques de inyección (por ejemplo, inyección de SQL si está comparando con una base de datos relacional) y desinfecte los campos si alguna vez los refleja en la página (para evitar las secuencias de comandos entre sitios), especialmente si usa cookies o almacenamiento local para cualquier cosa.
  8. ¿Los usuarios también pueden cargar archivos? Si es así, tiene un montón de cosas que debe tener en cuenta, desde evitar que los usuarios carguen contenido malintencionado o ilegal hasta asegurarse de que los usuarios no sobrescriban archivos importantes (posiblemente obtengan control sobre el servidor web) o hagan que el servidor gaste una tonelada de recursos que intentan procesar un archivo muy costoso (como una bomba de compresión ).

Estoy seguro de que se me ocurriría mucho más, pero eso debería ser suficiente para que comiences. La seguridad es dura. Tratar de simplificar su sistema de seguridad no significa que sea fácil hacerlo bien.

    
respondido por el CBHacking 18.10.2017 - 08:30
fuente

Lea otras preguntas en las etiquetas