Isso está realmente próximo de "Do my system architecture" para você, mas suas quatro ideias são estudos de caso interessantes em segurança variável, então vamos executar suas opções e ver como elas se comportam:
4. Verificando o referenciador
O referenciador é fornecido pelo cliente. Confiar nos dados de autenticação / autorização fornecidos pelo cliente praticamente anula a segurança (posso afirmar ter sido enviado de onde você espera que eu venha).
3. Baixe os arquivos através do nosso servidor
Não é uma má idéia, contanto que você esteja disposto a gastar a largura de banda para que isso aconteça, e seu servidor é confiável.
Supondo que você já resolveu o problema de segurança do seu servidor / aplicativo normal, essa é a opção mais segura apresentada.
Veredicto: Boa solução. Muito seguro, mas possivelmente sub-ótimo se a largura de banda for um fator.
2. URLs ofuscados
Segurança através da obscuridade ? Mesmo? Não.
Eu nem vou analisar isso. Apenas não.
Veredicto: Se o número 4 for TERRIBAD , isto é TERRIWORSE porque as pessoas nem precisam passar pelo esforço de forjar um cabeçalho de referência. Adivinhe a string e ganhe um prêmio de todos os dados!
1. Gerando (expirando) URLs assinados com PHP
Esta opção tem um quociente bem baixo de sucção.
Qualquer um pode clicar no URL e selecionar os dados, o que é um não-não-seguro, mas você atenua isso fazendo com que o link expire (contanto que a vida útil do link seja curta o suficiente, a janela de vulnerabilidade é pequena).
O URL que expira pode incomodar alguns usuários que querem se agarrar ao link de download por um longo tempo, ou que não obtêm o link em tempo hábil - isso é um pouco como uma experiência de usuário ruim , mas pode valer a pena.
Veredicto : Não tão bom quanto # 3, mas se a largura de banda é uma grande preocupação, certamente é melhor que # 4 ou # 2.
O que eu faria?
Com essas opções, eu optaria pelo # 3 - passe os arquivos pelo seu próprio servidor front-end e autentique a maneira como seu aplicativo normalmente funciona. Supondo que sua segurança normal é bastante decente, essa é a melhor opção do ponto de vista de segurança. Sim, isso significa mais uso de largura de banda em seu servidor e mais recursos jogando intermediário - mas você pode sempre cobrar um pouco mais por isso.