none
Proteger pasta com arquivos .jpg RRS feed

  • Pergunta

  • Bom dia ! não achei exatamente as respostas a minha questão no fórum.
    Então, Tenho uma pasta que tenho que proteger e deixar que os usuários acessem unicamente logado.
    Utilizo  o seguinte;

    <location path="Doc/Restrict/Image">
        <system.web>
            <authorization>
                <deny users="?"/>
            </authorization>
        </system.web>
    </location>

    Ele protege as páginas dentre da pasta, mas as imagens são facilmente acessadas via browser;

    www.meusite.com.br/Doc/Restict/Image/Img001.jpg

    Existe maneira de proteger este tipo de arquivos ? ou só protege páginas de programa ?
    obrigado !
    Dudu

     
    terça-feira, 6 de março de 2012 13:47

Respostas

  • Dudu,

    Sabe o que você pode fazer, é criar uma pasta restrita fora da sua aplicação do tipo thema.

    Fazendo isso nenhum cliente de fora da sua aplicação irá conseguir ver as imagens, porque receberá um erro de falta de permissão para acessar o diretório, no entando, você conseguirá acessar via seu código c#, acredito que essa solução seja a melhor e resolve seu problema de maneira simples, lembrando que esse recurso foi criado justamente evitar que pessoas roubassem themes das aplicações.

    Isso é comumente utilizado para banco de dados você cria um banco de dedas e coloca dentro do App_Code para ninguem roubar suas informações.

    Resolvido certo? 

    Doc/Theme/Image = Access Denied

    Se você for implementar dessa forma que eu coloquei, por favor não esqueça de marcar como resposta válida.

    Abraços,

    Leandro Rodrigues


    Caso a resposta tenha ajudado, não esqueça de marcar como resposta válida


    • Editado Leandro Rodrigues quarta-feira, 7 de março de 2012 02:50 erro digitação
    • Sugerido como Resposta Augusto.Silva quinta-feira, 8 de março de 2012 00:27
    • Marcado como Resposta Harley Araujo quinta-feira, 8 de março de 2012 10:46
    quarta-feira, 7 de março de 2012 02:13
  • Faz com handler mesmo

    http://forums.asp.net/t/1644430.aspx/1

    http://www.codeproject.com/Articles/39158/Protect-Files-and-Folders-Using-HttpHandlers-in-AS


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    • Sugerido como Resposta Augusto.Silva quinta-feira, 8 de março de 2012 00:26
    • Marcado como Resposta Harley Araujo quinta-feira, 8 de março de 2012 10:46
    quarta-feira, 7 de março de 2012 11:26
    Moderador

Todas as Respostas

  • Normalmente quando eu preciso fazer isso eu crio um handdler para retornar a imagem.


    http://samuelcazelli.blogspot.com/

    terça-feira, 6 de março de 2012 20:44
  • Dudu,

    Essa pergunta já foi respondida no forum, é isso que você deseja fazer observe o link.

    http://social.msdn.microsoft.com/Forums/pt/webgeralpt/thread/cfdb63ba-9b86-439e-92fd-e29f38339a0a

    Abraços,

    Leandro Rodrigues


    Caso a resposta tenha ajudado, não esqueça de marcar como resposta válida

    terça-feira, 6 de março de 2012 22:45
  • Obrigado Samuel e Leandro,

    Vou explicar com mais detalhes a necessidade; Estou fazendo um site para um fotógrafo, que tem um banco de imagens com milhares de fotos. Uso o arquivo .jpg para mostrar thumbnails e previews das imagens em distintas páginas, todas essas imagens estão em baixa resolução, o seja 500 pixel o lado maior e 72 dpi para os previews e bem menor para os thumbnails.

    Como o sistema permite que os clientes com cadastro aprovado possam fazer o download das imagens em alta resolução (.jpg com uns 9 MB. em media) eu tenho que cuidar muito onde colocarei essas imagens em alta. Esconder endereço ou colocar caminhos criptografados não é o problema. O problema é que as imagens estão no servidor num endereço, por exemplo; www.meusite.com.br/Acervo/Private/Alta/, e se essa pasta não fica protegida de alguma maneira qualquer um pode “adivinhar” ou achar o endereço e baixar diretamente pelo navegador.

    Tal vez exista uma solução simples que neste momento não consigo lembrar se já vi em algum fórum ou site.A solução que Samuel comentou não sei se seria muito conveniente, (não domino muito e pouco usei os handlers, só com algumas DLL’s) acho que a performance ficaria comprometida, já que uso o arquivo jpg em todo o site. Esconder o endereço como sugeriu o Leandro não seria problema, mas continuaria o endereço da pasta “liberado” para quem fuçar um pouco as pastas via browser. O grande medo do fotógrafo é esse, a disponibilidade das imagens dentro da estrutura de pastas.

    O ideal seria mesmo proteger a pasta, mas com o <location path="Doc/Restrict/Image">não protege mesmo. bloquear no IIS não funciona porque bloqueia todas as jpg’s.

    Vou continuar procurando e aguardo alguma “pista” para encontrar uma solução.

    Obrigado !

    Dudu


    • Editado Dudu da Copa quarta-feira, 7 de março de 2012 00:57
    quarta-feira, 7 de março de 2012 00:57
  • Dudu,

    Sabe o que você pode fazer, é criar uma pasta restrita fora da sua aplicação do tipo thema.

    Fazendo isso nenhum cliente de fora da sua aplicação irá conseguir ver as imagens, porque receberá um erro de falta de permissão para acessar o diretório, no entando, você conseguirá acessar via seu código c#, acredito que essa solução seja a melhor e resolve seu problema de maneira simples, lembrando que esse recurso foi criado justamente evitar que pessoas roubassem themes das aplicações.

    Isso é comumente utilizado para banco de dados você cria um banco de dedas e coloca dentro do App_Code para ninguem roubar suas informações.

    Resolvido certo? 

    Doc/Theme/Image = Access Denied

    Se você for implementar dessa forma que eu coloquei, por favor não esqueça de marcar como resposta válida.

    Abraços,

    Leandro Rodrigues


    Caso a resposta tenha ajudado, não esqueça de marcar como resposta válida


    • Editado Leandro Rodrigues quarta-feira, 7 de março de 2012 02:50 erro digitação
    • Sugerido como Resposta Augusto.Silva quinta-feira, 8 de março de 2012 00:27
    • Marcado como Resposta Harley Araujo quinta-feira, 8 de março de 2012 10:46
    quarta-feira, 7 de março de 2012 02:13
  • Legal Leandro, acho que pode ser por aí... vou testar e marcarei como válida. Obrigado !

    abs,

    Dudu

    quarta-feira, 7 de março de 2012 02:22
  • Faz com handler mesmo

    http://forums.asp.net/t/1644430.aspx/1

    http://www.codeproject.com/Articles/39158/Protect-Files-and-Folders-Using-HttpHandlers-in-AS


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    • Sugerido como Resposta Augusto.Silva quinta-feira, 8 de março de 2012 00:26
    • Marcado como Resposta Harley Araujo quinta-feira, 8 de março de 2012 10:46
    quarta-feira, 7 de março de 2012 11:26
    Moderador
  • Obrigado gente ! acho que as duas respostas estão corretas e podem ser utilizadas as soluções propostas por elas. Obrigado Leandro e Seilor.

    Optei por fazer simples, coloque as imagens na pasta App_Data.

    Resumindo, as imagens apresentadas num Datalist tem em baixo de cada uma um botão para fazer download, esse botão fica visivel unicamente para os usuarios logados e com a permissão para baixar imagens. Quando clicado esse botão entra em funcionamento o seguinte código:

                    ....
                    if (Reader.Read())
                    {
                        strFileName = Reader["IDFoto"].ToString();
                        strUserPath = Reader["PathGaleria"].ToString();
                        Reader.Close();

                        strPathFile = Server.MapPath("~/App_Data/" + strUserPath + "/" + strFileName + ".jpg");

                        Response.AppendHeader("content-disposition", "attachment; filename=" + strFileName + ".jpg");
                        Response.ContentType = "";
                        Response.WriteFile(strPathFile);
                        Response.End();
                    }
                    ....

     e pronto, mostra o diálogo para baixar a imagem sem mostar o caminho. Agora é so salvar na pasta local.

    Dudu.

    quinta-feira, 8 de março de 2012 15:12