Top 10 vulnerabilidades de aplicações C# e como evitá-las

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course
Here is the translated HTML content in Portuguese (Português), with all HTML tags preserved and only the text content translated. ```html

Segurança de aplicações C#: top 10 vulnerabilidades que todo desenvolvedor deve conhecer



Desenvolver em C# e na plataforma .NET é uma ferramenta poderosa para criar aplicações corporativas e web. No entanto, mesmo o código mais confiável pode conter brechas que levam a vazamento de dados, perda de reputação e prejuízos financeiros. Neste artigo, analisaremos as 10 vulnerabilidades mais comuns em aplicações C#, baseadas no OWASP Top 10, com exemplos práticos e formas de proteção.



1. Injeção de SQL (SQL Injection)



Esta é uma das ameaças mais antigas, mas ainda atual. A vulnerabilidade ocorre quando a entrada do usuário é concatenada diretamente em uma consulta SQL.



Código vulnerável:

string userName = Request.QueryString["name"];string query = "SELECT * FROM Users WHERE Name = '" + userName + "'";SqlCommand cmd = new SqlCommand(query, connection);


Código seguro (consultas parametrizadas):

string userName = Request.QueryString["name"];string query = "SELECT * FROM Users WHERE Name = @name";SqlCommand cmd = new SqlCommand(query, connection);cmd.Parameters.AddWithValue("@name", userName);


Recomendação: Sempre use consultas parametrizadas ou Entity Framework, que escapa automaticamente a entrada.



2. Cross-Site Scripting (XSS)



Os ataques XSS permitem que um invasor insira um script malicioso em uma página web. Em C#, isso ocorre frequentemente ao exibir dados não validados através de @Html.Raw().



Código vulnerável:

@Html.Raw(Model.Comment)


Código seguro (codificação de saída):

@Html.Encode(Model.Comment)


Recomendação: Use a sintaxe Razor @Model.Comment (que codifica HTML automaticamente) e nunca utilize @Html.Raw() sem validação.



3. Cross-Site Request Forgery (CSRF)



CSRF força um usuário autenticado a executar uma ação indesejada no site (por exemplo, transferir dinheiro). No ASP.NET Core, a proteção é incorporada, mas precisa ser ativada corretamente.



Código vulnerável (ausência de token antifalsificação):

<form method="post" action="/Account/Delete">    <button type="submit">Deletar conta</button></form>


Código seguro (com AntiForgeryToken):

<form method="post" action="/Account/Delete">    @Html.AntiForgeryToken()    <button type="submit">Deletar conta</button></form>


Recomendação: Adicione o atributo [ValidateAntiForgeryToken] aos seus métodos POST e use @Html.AntiForgeryToken() nos formulários.



4. Armazenamento inseguro de senhas



Armazenar senhas em texto simples ou usando hashes fracos (MD5, SHA1) é um erro grave.



Código vulnerável:

string passwordHash = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(password));


Código seguro (usando bcrypt/Argon2):

using BCrypt.Net;string passwordHash = BCrypt.HashPassword(password, workFactor: 12);


Recomendação: Use bibliotecas como BCrypt.Net ou Microsoft.AspNetCore.Identity, que geram salt automaticamente e utilizam algoritmos modernos.



5. Exposição de dados confidenciais em exceções



Exibir o stack trace completo para o usuário pode revelar a estrutura da aplicação, strings de conexão e caminhos de arquivos.



Código vulnerável (em produção):

catch (Exception ex){    return Content(ex.ToString());}


Código seguro:

catch (Exception ex){    _logger.LogError(ex, "Erro ao processar a solicitação");    return StatusCode(500, "Erro interno do servidor");}


Recom ```

Blogs

Book Recommendations