Una aplicación tiene 2 servidores: Server1
y Server2
.
Server1
almacena archivos de db e imagen + video. Server2
almacena una copia de todos los archivos de imagen + video.
De acuerdo con la ubicación geográfica de un usuario, si corresponde, a veces se usa Server2
(en lugar de Server1
) para la entrega de contenido.
La aplicación tiene archivos de imagen y video que son privados para los usuarios. Toda la lógica de quién tiene acceso a qué archivo reside en la base de datos en Server1
.
Solo los usuarios registrados en la aplicación (con nombre de usuario y contraseña) pueden acceder a su contenido privado.
La forma en que pretendo servir el contenido es -
- La solicitud de imagen (o video) llega a
Server1
. Se verifica si Este usuario puede acceder al archivo. Si es así, entonces - - (Si es geográficamente apropiado)
Server1
envía encabezados CORS (paraServer2
) + 3 números aleatorios de 10 dígitos (numset
) como encabezados, y la respuesta se redirige aServer2
. - Con respecto a
numset
-Server1
, se transmite un nuevo conjunto de 3 números aleatorios de 10 dígitos aServer2
cada 30 segundos. Cada conjunto de 3 números aleatorios de 10 dígitos tiene una vida útil de 40 segundos (10 segundos más para evitar el rechazo de solicitudes de vuelo). - La solicitud redirigida alcanza
Server2
, donde los encabezados de la solicitud se comparan con elnumset
ya existente, y se comprueba el origen de la solicitud CORS para que coincida con el deServer1
. Si todos los controles están bien, entonces - - Se sirve el archivo.
Nota:
1. Los nombres de los archivos de imagen y video son números aleatorios de 8 dígitos.
2. Server1
y Server2
están sobre https.
Preguntas -
1. ¿Cómo se puede hacer que Server2
sea más seguro, de modo que un usuario registrado, que en realidad es un pirata informático, que realiza solicitudes de curl, no pueda acceder a los archivos que no está autorizado a ver?
2. ¿Es este enfoque apropiado desde el punto de vista del desempeño?