Ao implantar aplicativos da Web (.net) em um ambiente de produção, é melhor usar a segurança integrada ou isso importa?
Parece-me que, se um hacker interrompe o servidor da Web, isso realmente não importa, pois ele pode se passar por uma máquina facilmente.
Pensamentos?
sql-server
security
web-applications
Eu não
fonte
fonte
Respostas:
Eu diria que existem apenas dois motivos válidos para usar a autenticação SQL:
Para o cenário que você está propondo (o host do servidor da Web está completamente comprometido), nada pode protegê-lo. O hacker pode fazer no servidor de banco de dados, no mínimo, tudo o que o servidor da web pode fazer . E eu diria que a defesa em profundidade pode ensinar você a minimizar a perda nesse caso: reduza os direitos de banco de dados da conta usada pelo servidor da web para o mínimo absolutamente necessário e nada mais. Segundo, verifique se o host do servidor da Web está comprometido, não pode ser usado para elevar privilégios mais altos que a conta do servidor da Web (por exemplo, não há outro serviço no host da WWW que use credenciais com privilégios mais altos no DB do que a conta da WWW). Estes são princípios básicos de segurança e não têm nada a ver com o esquema de autenticação usado.
Enquanto a autenticação sql vs. a autenticação windows não oferece uma vantagem clara no seu cenário, há outros problemas a serem considerados:
Uma última observação: o protocolo TDS expõe a senha de autenticação sql em texto não criptografado no tráfego, mas isso geralmente é atenuado solicitando a criptografia SSL do tráfego.
Então, por que você ainda vê hosts WWW de autenticação sql que armazenam a senha em claro no web.config? Esses são os maus desenvolvedores / administradores, não sejam um deles.
msdn.microsoft.com/en-us/library/aa378326(VS.85).aspx
technet.microsoft.com/en-us/library/ms189067.aspx
fonte
Se você não usar o SSPI, estará codificando o nome de usuário e a senha nos arquivos de origem.
Se você estiver codificando o nome de usuário e a senha nos arquivos de origem, todos os seus funcionários terão acesso a eles.
Isso é relativamente inseguro. Um ex-funcionário insatisfeito pode usar as informações maliciosamente. Um visitante pode ver o código em uma tela em algum lugar. Ou o código fonte pode sair acidentalmente na natureza.
A vantagem do SSPI é que a senha nunca é armazenada em nenhum lugar limpo.
fonte
As outras respostas até agora têm sido boas, mas vou dar outra: gestão.
Mais cedo ou mais tarde, você provavelmente terminará com vários servidores SQL. O gerenciamento da autenticação SQL entre seu aplicativo e vários servidores SQL pode ser um pouco doloroso, especialmente quando você enfrenta problemas de segurança. Se você alterar uma senha de autenticação do Windows uma vez, ela será alterada imediatamente em todos os seus servidores. Se você precisar rotacionar suas senhas de autenticação SQL, é mais doloroso - a ponto de você provavelmente não fazer isso. Isso é um risco de segurança.
fonte
Não tenho 100% de certeza aqui, mas acho que o ponto principal é que a autenticação SQL é insegura; portanto, é melhor usar a autenticação do Windows. Dependendo da configuração do aplicativo, você também pode armazenar as credenciais apropriadas em um formato criptografado na máquina usando a autenticação do Windows. Eu não acho que isso seja realmente possível com a autenticação SQL. Você pode ofuscá-lo, mas, no final das contas, deve ficar claro.
Além disso, apenas porque um hacker pode entrar em um servidor não significa que o jogo acabou. Um hacker pode obter o controle de um processo sem privilégios, mas não pode fazer mais nada no servidor. É por isso que é importante não executar tudo como administrador ou sistema, mas usar contas de serviço com privilégios mínimos.
fonte
A melhor coisa a fazer é limitar o que eles podem fazer se / quando invadirem o servidor da web. Isso significa conceder apenas os direitos SQL necessários para o aplicativo funcionar. É muito mais fácil conceder direitos DBO ao aplicativo, mas isso torna o banco de dados muito mais vulnerável no caso de um ataque bem-sucedido ao servidor da web.
fonte
Eu vou preceder tudo isso dizendo que estou assumindo que você está falando de um servidor Web interno na rede privada interna.
Vamos começar com a representação da máquina. Se a identidade do pool de aplicativos for Serviço de Rede e não houver representação no aplicativo .NET, sim, o aplicativo Web se conectará ao SQL Server de back-end usando a conta de computador da máquina. E isso significa que você concedeu acesso à conta da máquina. O CRM da Microsoft funciona dessa maneira.
No entanto, se você especificou uma identidade, essa conta de usuário precisará acessar o SQL Server. Embora você esteja certo de que, se um invasor comprometeu o servidor Web, ele efetivamente tem o mesmo acesso que a conta de identidade, a verdade é que o uso de um logon do SQL Server não altera nada aqui. Depois de ter acesso, posso modificar o aplicativo Web para fazer o que eu quero e o que ele fizer, no máximo que sua segurança permitir no SQL Server de back-end.
Agora, por que usar o SSPI. Em primeiro lugar, você não está usando um logon baseado no SQL Server. Isso significa que o Active Directory é a única fonte de segurança. Isso significa que você tem os meios normais de auditoria para determinar o acesso inválido. Segundo, significa que, a menos que haja outros aplicativos que exijam, você pode deixar o SQL Server no modo somente de autenticação do Windows. Isso significa que nenhum logon do SQL Server é permitido. Isso significa que qualquer ataque contra o sa é interrompido antes mesmo de começar. E, finalmente, facilita a recuperação. Se você usar um logon baseado no SQL Server, precisará extrair o logon com SID e senha criptografada. Se você estiver usando uma conta de usuário baseada no Windows como uma "conta de serviço", quando acessar um novo SQL Server, criando o logon,
fonte
A questão é qual é "melhor"? O que é difícil de responder, pois se baseia no contexto, valores e prioridades do questionador.
Pessoalmente, eu gosto de autenticação SQL.
Último ponto: você codifica sua classe do gerenciador de conexões para tentar cada cadeia de conexão, para alterar a senha no primeiro na configuração, enviar a alteração e o failover para a segunda conexão e atualizar a senha no MSQL e o primeiro será usado novamente. É necessária uma alteração final na configuração para definir a segunda senha igual à primeira, pronta para a próxima vez.
fonte
Se os usuários não estiverem manipulando o banco de dados diretamente (por meio de outras ferramentas clientes, como o SQL Server Management Studio), normalmente criarei um único logon SQL para o aplicativo e concederei o acesso necessário. Nesse ponto, o usuário fica restrito ao que pode fazer conforme permitido pela interface do aplicativo da web.
fonte