Segurança de aplicações C#: top 10 vulnerabilidades para iniciantes

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 para iniciantes

A segurança de software é uma das principais tarefas do desenvolvedor. Mesmo uma pequena aplicação em C# pode se tornar alvo de atacantes se vulnerabilidades comuns não forem consideradas. Neste artigo, vamos analisar as 10 vulnerabilidades mais perigosas do C# (.NET) que desenvolvedores iniciantes enfrentam. Você aprenderá como elas surgem, como são exploradas e, principalmente, como se proteger delas.



1. SQL Injection

Esta é uma das vulnerabilidades mais antigas e perigosas. Ela ocorre quando a entrada do usuário é concatenada diretamente em uma consulta SQL.

Exemplo de código vulnerável:

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

Como atacam: O atacante pode passar no parâmetro user o valor ' OR 1=1 --, que retornará todos os registros da tabela.

Proteção: Use consultas parametrizadas.

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


2. Cross-Site Scripting (XSS)

A vulnerabilidade XSS permite injetar código JavaScript malicioso em uma página que é exibida para outros usuários.

Exemplo de código vulnerável (ASP.NET WebForms):

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

Proteção: Sempre codifique a saída. Use HttpUtility.HtmlEncode() ou a sintaxe Razor (@), que codifica os dados automaticamente.

Response.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");


3. Desserialização insegura

Ao desserializar dados de uma fonte não confiável (por exemplo, de uma requisição ou arquivo), o atacante pode executar código arbitrário no servidor.

Exemplo de código vulnerável (BinaryFormatter):

BinaryFormatter formatter = new BinaryFormatter();using (var stream = new MemoryStream(data)){    var obj = formatter.Deserialize(stream); // PERIGOSO!}

Proteção: Use serializadores modernos (JSON, XML com restrições), verifique os tipos e nunca desserialize dados de clientes não confiáveis. Evite BinaryFormatter, SoapFormatter e LosFormatter.



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

Isso inclui senhas fracas, ausência de limitação no número de tentativas de login, cookies de sessão não protegidos.

Exemplo de vulnerabilidade: Cookie de sessão sem as flags HttpOnly e Secure.

Proteção:

  • Use Identity ou ASP.NET Core Identity.
  • Configure o cookie: HttpOnly, Secure, SameSite=Strict.
  • Ative a limitação no número de tentativas de login (Account Lockout).
  • Use HTTPS.
services.ConfigureApplicationCookie(options =>{    options.Cookie.HttpOnly = true;    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;    options.Cookie.SameSite = SameSiteMode.Strict;});


5. Cross-Site Request Forgery (CSRF)

Ataque no qual o atacante força um usuário autenticado a executar uma ação indesejada no site (por exemplo, transferir dinheiro).

Proteção: Use Anti-Forgery Tokens. No ASP.NET Core, isso é feito automaticamente ao usar a tag <form> com asp-antiforgery.

Blogs

Book Recommendations