none
Impedir acesso a uma página .html sem logar RRS feed

  • Pergunta

  • Olá pessoal,

          Desenvolvi uma aplicação Asp.net mvc 4 + razor que possui um página de HOME de acesso anônimo, que disponibiliza uma opção para o usuário acessar a tela de login. 

          Ao fazer login, o sistema possui Roles que impede acesso não autorizado as Actions do sistema, até aí funciona tudo direitinho.

          O problema é que existe no meu sistema, uma pasta aleatória que possui um [index.html], mas  que não possui um Controller e portanto não passa pelo tratamento de Roles.  Neste caso se o usuário digitar no browser :

    localhost:10185/PastaComum

    ele terá acesso a mesma.  Existe uma maneira de impedir isso sem ter que "sacrificar" a página HOME ???

    Abraços

          

         

    quarta-feira, 12 de março de 2014 15:47

Todas as Respostas

  • Bom dia,

    é só você ir no controller e colocar uma tag com nome 

    [Authorize]

    http://stackoverflow.com/questions/329658/asp-net-mvc-authorization

    veja o link explica como funciona, quando você colocar a tab [Authorize] ele só vai deixar você acessar

    a View se estiver logado!

    quarta-feira, 12 de março de 2014 16:33
  • bom dia,

    VocÊ pode utilizar um arquivo Web.config dentro da pasta com o seguinte conteudo.

    <system.web>
         <authorization>
              <deny users="?"/>
         </authorization>
    </system.web>

    Para que o mesmo bloquei qualquer acesso de quem não esteja logado.

    Att

    quarta-feira, 12 de março de 2014 16:39
  • bom dia,

    VocÊ pode utilizar um arquivo Web.config dentro da pasta com o seguinte conteudo.

    <system.web>
         <authorization>
              <deny users="?"/>
         </authorization>
    </system.web>

    Para que o mesmo bloquei qualquer acesso de quem não esteja logado.

    Att

    Boa Tarde Manoel Bruno,

    Muito obrigado pela resposta.

    Eu fiz isso que você me sugeriu, só que agora a minha HOME padrão que é a página principal da aplicação em que todos podem acessar, não aparece mais, ou seja, vai direto para a página de Login.

        public class HomeController : Controller
        {
            public ActionResult Index()
            {
    
                return View();
            }

    Como eu faço para corrigir isso?

    abraços


    quarta-feira, 12 de março de 2014 17:24
  • Bom dia,

    é só você ir no controller e colocar uma tag com nome 

    [Authorize]

    http://stackoverflow.com/questions/329658/asp-net-mvc-authorization

    veja o link explica como funciona, quando você colocar a tab [Authorize] ele só vai deixar você acessar

    a View se estiver logado!

    Olá Washington Caetano,

    Veja, essa página [ index.html ], como informado anteriormente, não tem CONTROLLER, sendo assim não tem como eu colocar annotation.

    Você teria outra solução??

    Abraços

    quarta-feira, 12 de março de 2014 17:27
  • Tenho sim,

    como o amigo Manoel Citou você pode definir no arquivo web.config 

    ai você coloca a página que você quer bloquear acesso sem login

    exemplo:

    <system.web> <authentication mode="Forms"> <forms name=".ORGANIZATION" loginUrl="Default.aspx" protection="All" timeout="120"/> </authentication> <authorization> <deny users="?"/> <allow users="*"/> </authorization> </system.web>

    <location path="page1.aspx">
            <system.web>
                <authorization>
                    <allow users="*" />
                </authorization>
            </system.web>
        </location>

    Dê uma olhada nesse outro link

    http://stackoverflow.com/questions/8990940/allowing-public-access-to-two-asp-net-webform-pages-when-the-rest-require-author

    quarta-feira, 12 de março de 2014 17:31
  • Você tentou colocar  o web.config criado com esse código somente na  pasta:

    localhost:10185/PastaComum

    Para quele ele proteja somente esta pasta e não interfira no seu home.

    Att.

    quarta-feira, 12 de março de 2014 17:48
  • Você tentou colocar  o web.config criado com esse código somente na  pasta:

    localhost:10185/PastaComum

    Para quele ele proteja somente esta pasta e não interfira no seu home.

    Att.

      Baseado no exemplo do colega Washington Caetano, seria mais ou menos assim para bloquear a pasta inteira???:

       <location path="/PastaComum">
            <system.web>
                <authorization>
                    <deny users="*" />
                </authorization>
            </system.web>
        </location>


    quarta-feira, 12 de março de 2014 18:11
  • Tenho sim,

    como o amigo Manoel Citou você pode definir no arquivo web.config 

    ai você coloca a página que você quer bloquear acesso sem login

    exemplo:

    <system.web> <authentication mode="Forms"> <forms name=".ORGANIZATION" loginUrl="Default.aspx" protection="All" timeout="120"/> </authentication> <authorization> <deny users="?"/> <allow users="*"/> </authorization> </system.web>

    <location path="page1.aspx">
            <system.web>
                <authorization>
                    <allow users="*" />
                </authorization>
            </system.web>
        </location>

    Dê uma olhada nesse outro link

    http://stackoverflow.com/questions/8990940/allowing-public-access-to-two-asp-net-webform-pages-when-the-rest-require-author

    Boa tarde Washington,

    Eu fiz assim no meu Web.config:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
      For more information on how to configure your ASP.NET application, please visit
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    <configuration>
      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <connectionStrings>
        
      </connectionStrings>
      <appSettings>
        <add key="webpages:Version" value="2.0.0.0" />
        <add key="webpages:Enabled" value="false" />
        <add key="PreserveLoginUrl" value="true" />
        <add key="ClientValidationEnabled" value="true" />
        <add key="UnobtrusiveJavaScriptEnabled" value="true" />
      </appSettings>
      
    
      <!-- VEJA AQUI WASHINGTON  Impede acesso Anonimo ao sistema -->
      <location path="PastaComum">
          <system.web>
            <authorization>
              <deny users="?" />
            </authorization>
          </system.web>
      </location>
      
      <system.web>
        <!--<sessionState timeout="1" />-->
        <customErrors mode="Off" />
        <compilation debug="true" targetFramework="4.5">
          <assemblies>
    
          </assemblies>
        </compilation>

    Se eu digitar no browser: localhost:10185/PastaComum  o sistema impede o acesso e retorna para a tela de login, mas se eu digitar localhost:10185/PastaComum/index.html,  a segurança falha e permite abrir a página.  O que eu faço para resolver isso ???

    Abraços



    quarta-feira, 12 de março de 2014 21:10
  • Boa noite,

    tente fazer o seguinte

    <!-- VEJA AQUI WASHINGTON Impede acesso Anonimo ao sistema --> <location path="PastaComum/index.html"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location>

    Veja se resolve o problema!

    Bom dia meu amigo!!!

    Infelizmente não funcionou, tô achando que não deve existir um meio de bloquear o acesso externo a estas pastas particulares. Desta forma minha aplicação fica vulnerável.

    Eu fiz conforme você me sugeriu, aí eu digitei no browser:  http://localhost:10185/PastaComum/index.html, a página não foi bloqueada, ou seja, a configuração no web.config não funcionou.


    quinta-feira, 13 de março de 2014 13:38
  • Pensei da seguinte forma, se a pessoa loga em seu sistema, imagino que você cria uma instância de uma Session para ele.

    Valide no Global.asax se a Session existe ou se é nula, caso seja nula, obviamente é porque a pessoa não logou, então você trata qual URL ele tentou acessar e redirecione-o a outro caminho.

    Veja aqui um exemplo de como validar a Session, verificar qual página o usuário está tentando acessar, e redirecioná-lo para outra caso você queira.


    Se a sugestão resolver o problema, favor marcar como Resposta.


    • Editado Lucas_Santos quinta-feira, 13 de março de 2014 13:56
    quinta-feira, 13 de março de 2014 13:52
  • Pensei da seguinte forma, se a pessoa loga em seu sistema, imagino que você cria uma instância de uma Session para ele.

    Valide no Global.asax se a Session existe ou se é nula, caso seja nula, obviamente é porque a pessoa não logou, então você trata qual URL ele tentou acessar e redirecione-o a outro caminho.

    Veja aqui um exemplo de como validar a Session, verificar qual página o usuário está tentando acessar, e redirecioná-lo para outra caso você queira.


    Se a sugestão resolver o problema, favor marcar como Resposta.


    Olá Lucas Santos, obrigado por tentar nos ajudar.

    Olha, eu trabalho com o ASP.NET MVC 4 e Razor, pelo que eu vi no link que você me passou, essa configuração no Global.asax não compreende o MVC 4.

    Eu já ouvi falar até de Filtros para fazer bloqueio de pastas particulares, mas o problema é que ainda não tenho competência para fazer isso.

    Sem querer abusar, você ou outro colega poderia me ajudar nessa empreitada para o MVC 4 ?

    Abraços

    quinta-feira, 13 de março de 2014 14:57
  • Bom dia!!

    poderia me dizer por que você não quer usar um controller???, há alguma restrição na logica?

    sexta-feira, 14 de março de 2014 03:46
  • Bom dia!!

    poderia me dizer por que você não quer usar um controller???, há alguma restrição na logica?

    Bom dia Richof, como vai tudo  na paz?!

        Claro, posso dizer sim.  Além do ASP.NET MVC 4 e o Razor, eu utilizo um framework javascript chamado de Extjs.

         Junto com esse Extjs, existe uma página HTML em uma das pastas dele, que faz o carregamento de algumas bibliotecas.  Já tentei colocar esses carregamentos em uma página CSHTML usando um Controller, só que o Extjs não funciona direito se eu não seguir as regras dele.

          Uma outra razão para que eu procure uma forma de bloquear pastas particulares, é que eu vou ter uma outra pasta, em que eu irei guardar documentos muito importantes nela, como por exemplo: XLS, DOC, PDF e etc.  Neste caso também, seria prudente impedir qualquer tipo de acesso a esta pasta por pessoas não autorizadas.

           Um amigo já viu e me disse que existe sim uma maneira de fazer este tipo de bloqueio se baseando em filtros, só que ele também não sabe fazer.

            Bom, estas são as razões pelo meu "desespero" ..rsrsrsrsrs

    Espero contar também com sua ajuda Richof.

    Grande abraço e fique na paz!!!

      


    sexta-feira, 14 de março de 2014 13:29
  • Boa tarde pessoal, tudo bem com vocês?

    Desculpe insistir no assunto, mas será que um moderador do grupo poderia me ajudar nesta questão?

    Abraços

    domingo, 16 de março de 2014 18:15