Ocultar caminho de imagens
04/06/2012 15:48
0
Bom dia.

Como posso fazer para ocultar o caminho de uma imagem, evitando que usuários não autorizados possam acessá-la?

Tenho uma aplicação onde o usuário pode fazer upload de imagens. Estou armazenando os arquivos no diretório web-app/img/idUsuario/ e apenas o caminho no banco de dados.


def webRootDir = servletContext.getRealPath("/")
def userDir = new File(webRootDir, "/img/${session.User_id}")
userDir.mkdirs()
uploadedFile.transferTo( new File( userDir, uploadedFile.originalFilename))
fotoInstance.filename = uploadedFile.originalFilename


O problema é que quando as imagens são exibidas em uma .gps o usuário pode copiar o src e alterar a url para acessar imagens de outros usuários, pois o caminho fica visível.


<img src="/test/img/1/foto.jpg" alt="Aguardando foto" title="foto1.jpg"/>


Grato.
Tags: upload. imagem. ocultar. hidden


0
Não tem como. O que normalmente se faz é colocar essas imagens em algum lugar no file system fora da aplicação web (ou algum serviço de armazenamento como o S3 ou DropBox) e criar uma action que vai fazer algum tipo de validação do usuário e se ele puder ver a foto, a action lê a foto do file system e manda pro outputStream.
04/06/2012 16:33


0
eu tenho algo parecido em uma aplicação no meu caso é com documentos na hora de fazer o select para a tela eu mostro apenas o que pertence ao usuário logado.

seria mais ou menos isso?
04/06/2012 17:44


0
Oi manthay.
Eu já estou mostrando apenas as imagens pertencentes ao usuário logado, embora existam várias no diretório de imagens. Mas como o usuário pode visualizar o endereço da imagem ele pode tentar alterar o caminho para roubar imagens de outros usuários indevidamente.

Salvando a imagem com um nome cheio de números aleatórios impediria o acesso aos arquivos?


rcauler, pode me dar uma dica de como fazer a validação nesse caso?
04/06/2012 20:33


0
A validação vai depender de como você vai resolver se o usuário vai ter ou não acesso a foto.

O negócio é na hora de mostrar a imagem você apontar pra action e não pra imagem.


// em vez de
<img src="/test/img/1/foto.jpg" alt="Aguardando foto" title="foto1.jpg"/>

// usar alguma coisa assim
<img src="${createLinkTo( controller : 'foto', action : 'show', id : 1 )}" alt="Aguardando foto" />

// na action fazer a lógica
class FotoController {
...
def show( def id ) {
if ( seUsuarioLogadoPodeVerAFoto( id ) ) {
// ler a foto e mandar pro outputStream
} else {
// retorna erro de 403 de acesso negado
}
}
...
}


Salvar a imagem com números aletatório iria dificultar o usuário achar alguma foto que não é dele, mas não impediria caso ele desse a sorte de achar alguma.
05/06/2012 20:49



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto