Segurança de aplicações C#: top 10 vulnerabilidades e proteção em .NET

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 e métodos de proteção no .NET



Desenvolver aplicações seguras em C# e na plataforma .NET é uma tarefa criticamente importante para qualquer desenvolvedor. Mesmo considerando os mecanismos de proteção integrados, o framework não pode prevenir todos os ataques. Neste artigo, analisaremos as 10 vulnerabilidades mais comuns em aplicações C#, baseadas no ranking atual OWASP Top 10, e mostraremos como evitá-las com exemplos de código.



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

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

Código vulnerável:

string query = "SELECT * FROM Users WHERE Username = '" + username + "'";SqlCommand cmd = new SqlCommand(query, connection);

Código seguro (uso de consultas parametrizadas):

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


2. Scripting entre sites (XSS)

Ataque no qual o invasor insere um script malicioso em uma página web. No ASP.NET Core, é importante codificar a saída.

Código vulnerável (Razor):

<div>@Model.UserInput</div>

Código seguro:

<div>@Html.Encode(Model.UserInput)</div>// Ou no ASP.NET Core use @Model.UserInput, se não estiver usando HtmlString

No ASP.NET Core Razor, a saída é codificada por padrão, mas ao usar @Html.Raw() ou retornar ContentResult com dados não verificados, o risco retorna.



3. Falsificação de solicitação entre sites (CSRF)

Ataque no qual o invasor força um usuário autenticado a executar uma ação indesejada.

Proteção no ASP.NET Core:

// Em ConfigureServicesservices.AddAntiforgery(options => options.HeaderName = "X-CSRF-TOKEN");

// No controller[AutoValidateAntiforgeryToken]public class AccountController : Controller{ [HttpPost] [ValidateAntiForgeryToken] public IActionResult ChangePassword(ChangePasswordModel model) { // código }}


4. Desserialização insegura

Vulnerabilidade perigosa, especialmente ao usar BinaryFormatter, SoapFormatter ou Newtonsoft.Json com TypeNameHandling.All.

Código vulnerável:

var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };var obj = JsonConvert.DeserializeObject(json, settings);

Código seguro:

// Use System.Text.Json (seguro por padrão)var obj = JsonSerializer.Deserialize<MyType>(json);// Ou restrinja TypeNameHandling no Newtonsoftvar settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None };


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

Inclui senhas fracas, ausência de bloqueio de conta, cookies desprotegidos.

Recomendações:

  • Use ASP.NET Core Identity com políticas de senhas.
  • Configure a proteção de cookies: HttpOnly, Secure, SameSite.
  • Ative o bloqueio após N tentativas falhas.
services.ConfigureApplicationCookie(options =>{    options.Cookie.HttpOnly = true;    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;    options.Cookie.SameSite = SameSiteMode.Strict;    options.ExpireTimeSpan = TimeSpan.FromMinutes(30);    options.SlidingExpiration = true;});


6. Exposição de dados sensíveis

Armazenamento de senhas em texto puro, transmissão de dados via HTTP, registro de segredos em log.

Código seguro:

// Hash de senhasvar passwordHasher = new PasswordHasher<User>();string hash = passwordHa                

Blogs

Book Recommendations