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
IdentityouASP.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.