Segurança de aplicações C#: top 10 vulnerabilidades na prática

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

Segurança de aplicações C#: top 10 vulnerabilidades na prática



A segurança é um dos componentes mais importantes no desenvolvimento de aplicações modernas em C# e .NET. Mesmo um pequeno bug negligenciado pode levar ao vazamento de dados ou à completa comprometimento do sistema. Neste artigo, abordaremos as 10 vulnerabilidades mais comuns que os desenvolvedores C# enfrentam e mostraremos como evitá-las na prática.



1. SQL Injection

A vulnerabilidade mais antiga e perigosa. Ocorre quando a entrada do usuário é inserida diretamente em uma consulta SQL.



Código vulnerável:

string login = txtLogin.Text;string query = "SELECT * FROM Users WHERE Login = '" + login + "'";SqlCommand cmd = new SqlCommand(query, connection);


Código seguro (consultas parametrizadas):

string login = txtLogin.Text;string query = "SELECT * FROM Users WHERE Login = @login";SqlCommand cmd = new SqlCommand(query, connection);cmd.Parameters.AddWithValue("@login", login);


Proteção adicional: use ORM (Entity Framework) — ele parametriza consultas automaticamente.



2. Cross-Site Scripting (XSS)

Um invasor insere código JavaScript malicioso na página através da entrada do usuário.



Código vulnerável:

string comment = Request.Form["comment"];Response.Write("<div>" + comment + "</div>");


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

string comment = Request.Form["comment"];Response.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");


No ASP.NET Core, use @Html.Encode() ou a sintaxe Razor com codificação automática.



3. Cross-Site Request Forgery (CSRF)

Ataque em que o invasor força o usuário a executar uma ação indesejada em um site onde ele está autenticado.



Código vulnerável (sem proteção):

[HttpPost]public IActionResult DeleteAccount(int userId){    // Exclusão de conta sem verificação de token    return Ok();}


Proteção com tokens antiforjamento no ASP.NET Core:

[HttpPost][ValidateAntiForgeryToken]public IActionResult DeleteAccount(int userId){    // Exclusão segura    return Ok();}


No cliente, o token é transmitido através de um campo oculto de formulário ou cabeçalho.



4. Desserialização insegura

Ao desserializar dados de uma fonte não confiável, um invasor pode executar código arbitrário.



Código vulnerável (BinaryFormatter):

BinaryFormatter formatter = new BinaryFormatter();using (FileStream fs = new FileStream("data.bin", FileMode.Open)){    var obj = formatter.Deserialize(fs); // Perigoso!}


Alternativas seguras:

  • Use System.Text.Json ou Newtonsoft.Json com restrição de tipos.
  • Ative TypeNameHandling.None.
  • Evite BinaryFormatter, SoapFormatter e LosFormatter.


5. Falhas de autenticação e gerenciamento de sessão

Autenticação fraca, armazenamento de senhas em texto claro, tokens de sessão previsíveis.



Erros:

  • Armazenamento de senha em texto claro: User.Password = txtPassword.Text;
  • Implementação própria de hash sem salt.
  • Uso de Guid.NewGuid() para gerar tokens — muito previsível.


Abordagem correta:

  • Use ASP.NET Core Identity — solução integrada.
  • Faça hash de senhas com BCrypt.Net ou

Blogs

Book Recommendations