Ocultar caminho de imagens
04/06/2012 15:48
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
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.
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?
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?
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.
Ainda não faz parte da comunidade???
Para se registrar, clique aqui.