Eu gostaria de saber o que as pessoas consideram a prática recomendada para proteger as seções Admin de sites, especificamente do ponto de vista de autenticação / acesso.
Claro que há coisas óbvias, como usar SSL e registrar todo o acesso, mas estou me perguntando onde, acima dessas etapas básicas, as pessoas consideram a barreira a ser definida.
Por exemplo:
- Você está contando apenas com o mesmo mecanismo de autenticação que usa para usuários normais? Se não, o quê?
- Você está executando a seção Admin no mesmo 'domínio de aplicativo'?
- Quais etapas você executa para tornar a seção administrativa desconhecida? (ou você rejeita toda a coisa de 'obscuridade')
Até agora, as sugestões dos respondentes incluem:
- Introduzir uma pausa artificial do lado do servidor em cada verificação de senha de administrador para evitar ataques de força bruta [Arte do desenvolvedor]
- Use páginas de login separadas para usuários e admin usando a mesma tabela de banco de dados (para impedir o XSRF e o roubo de sessão que concede acesso às áreas administrativas) [Thief Master]
- Considere também adicionar autenticação nativa do servidor da web à área administrativa (por exemplo, via .htaccess) [Thief Master]
- Considere bloquear o IP de usuários após uma série de tentativas de login de administrador malsucedidas [Thief Master]
- Adicionar captcha após falhas nas tentativas de login de administrador [Thief Master]
- Fornece mecanismos igualmente fortes (usando as técnicas acima) para usuários e administradores (por exemplo, não trate os administradores de maneira especial) [Lo'oris]
- Considere a autenticação de segundo nível (por exemplo, certificados de cliente, cartões inteligentes, cardspace, etc.) [JoeGeeky]
- Permita apenas o acesso de IPs / domínios confiáveis, adicione a verificação ao pipeline HTTP básico (por exemplo, HttpModules) se possível. [JoeGeeky]
- [ASP.NET] Bloqueie IPrincipal & Principal (torne-os imutáveis e não enumeráveis) [JoeGeeky]
- Federar Elevação de Direitos - por exemplo, enviar e-mail para outros administradores quando os direitos de algum administrador forem atualizados. [JoeGeeky]
- Considere direitos refinados para administradores - por exemplo, em vez de direitos baseados em funções, defina direitos para ações indicativas por administrador [JoeGeeky]
- Restrinja a criação de administradores - por exemplo, os administradores não podem alterar ou criar outras contas de administrador. Use um cliente 'superadmin' bloqueado para isso. [JoeGeeky]
- Considere certificados SSL do lado do cliente ou keyfobs do tipo RSA (tokens eletrônicos) [Daniel Papasian]
- Se usar cookies para autenticação, use cookies separados para páginas administrativas e normais, por exemplo, colocando a seção de administração em um domínio diferente. [Daniel Papasian]
- Se for prático, considere manter o site de administração em uma sub-rede privada, fora da Internet pública. [John Hartsock]
- Emita novamente tíquetes de autenticação / sessão ao alternar entre contextos de uso administrativo / normal do site [Richard JP Le Guen]
security
authentication
UpTheCreek
fonte
fonte
Respostas:
Todas essas são boas respostas ... Eu geralmente gosto de adicionar algumas camadas adicionais para minhas seções administrativas. Embora eu tenha usado algumas variações de um tema, elas geralmente incluem um dos seguintes:
fonte
Se o site requer um login para atividades regulares e administradores, por exemplo, um fórum, eu usaria logins separados que usam o mesmo banco de dados de usuário. Isso garante que o XSRF e o roubo de sessão não permitirão que o invasor acesse áreas administrativas.
Além disso, se a seção admin estiver em um subdiretório separado, proteger aquele com a autenticação do servidor web (.htaccess no Apache, por exemplo) pode ser uma boa ideia - então alguém precisa dessa senha e da senha do usuário.
Obscurecer o caminho do administrador quase não produz ganho de segurança - se alguém souber os dados de login válidos, provavelmente também será capaz de descobrir o caminho da ferramenta de administração, já que ele fez o phishing ou keyloged você ou conseguiu através da engenharia social (o que provavelmente revelaria o caminho também).
Uma proteção de força bruta, como bloquear o IP do usuário após 3 logins com falha ou exigir um CAPTCHA após um login com falha (não para o primeiro login, pois isso é extremamente irritante para usuários legítimos) também pode ser útil.
fonte
Sim, depois de escrevê-lo, percebi que esta resposta poderia ser resumida como "nada de especial para o login de administrador, são todos recursos de segurança que devem ser usados para qualquer login".
fonte
Se você usar apenas um único login para usuários que têm privilégios de usuário normal e privilégios de administrador, gere novamente seu identificador de sessão (seja em um cookie ou um parâmetro GET ou qualquer outro ...) quando houver uma mudança no nível de privilégio ... no mínimo.
Então, se eu logar, faço um monte de coisas normais de usuário e, em seguida, visitar uma página de administração, regenerar meu ID de sessão. Se eu navegar de uma (s) página (s) de administração para uma página de usuário normal, gere novamente meu ID.
fonte
Tenha uma boa senha de administrador.
Não,
"123456"
mas uma sequência de letras, dígitos e caracteres especiais longos o suficiente, digamos, 15-20 caracteres. Gosto"ksd83,'|4d#rrpp0%27&lq(go43$sd{3>"
.Adicione uma pausa para cada verificação de senha para evitar ataques de força bruta.
fonte
Aqui estão algumas outras coisas a serem consideradas:
fonte
Usamos
Windows Authentication
para acesso de administrador. Esta é a maneira mais prática de proteger as áreas administrativas enquanto mantém a autenticação separada do que se aplica aos usuários finais em geral. O administrador do sistema gerencia as credenciais de acesso do usuário Admin e impõe políticas de senha na conta do usuário de domínio.fonte
A maneira estrita é ter dois "farms" completos diferentes, incluindo bancos de dados, servidores e tudo e mover os dados de um farm para outro. A maioria dos sistemas modernos e de grande escala usa essa abordagem (Vignette, SharePoint, etc.). Normalmente é referido como tendo diferentes estágios "estágio de edição" -> "estágio de visualização" -> "estágio de entrega". Este método permite que você trate o conteúdo / configuração da mesma forma que você trata o código (dev-> qa-> prod).
Se você for menos paranóico, pode ter um único banco de dados, mas apenas sua seção de administração disponível nos servidores de "edição". Quer dizer, apenas os scripts / arquivos de edição são colocados no servidor de edição.
Naturalmente, a etapa de edição deve estar disponível apenas em uma intranet local e / ou por meio de VPN.
Isso pode parecer um exagero e pode não ser a solução mais fácil para todos os casos de uso, mas é definitivamente a maneira mais robusta de fazer as coisas.
Observe que coisas como "ter senhas de administrador fortes" são legais, mas ainda deixam seu administrador aberto a ataques inteligentes de todos os tipos.
fonte
Depende muito do tipo de dados que você deseja proteger (requisitos legais e outros).
Muitas sugestões são sobre autenticação .. Acho que você só deve considerar o uso de autenticação OpenId / Facebook como login. (Eles provavelmente gastarão mais recursos em segurança de autenticação do que você)
Salve as alterações e atualize os valores no banco de dados. Dessa forma, você pode reverter as alterações do usuário X ou entre as datas X e Y.
fonte
Não percebi que ninguém mencionou armazenamento / validação da senha de administrador. Por favor, não armazene o PW em texto simples, e de preferência nem mesmo em algo que possa ser revertido - use algo como um hash MD5 com sal para que, pelo menos, se alguém recuperar a "senha" armazenada, eles não tenham qualquer coisa terrivelmente útil, a menos que eles também tenham seu esquema de sal.
fonte
Adicione um campo de senha e uma pergunta de segurança que o administrador saberá, por exemplo, qual era o nome da sua primeira namorada, ou randomize as perguntas sempre que visualizar o painel de administração.
Talvez você possa sempre colocar a seção de administração em um grande diretório, por exemplo
Mas isso não é realmente bom hah.
Talvez você possa incluir uma string de consulta na página inicial, como:
Quando isso acontecer, o campo de nome de usuário e senha aparecerá.
fonte