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

\n\n

Desenvolver aplicações seguras em C# não é apenas uma tendência, mas uma necessidade. Todos os dias, milhares de vulnerabilidades são descobertas no mundo, e sua aplicação pode ser o próximo alvo. Neste artigo, vamos analisar as 10 vulnerabilidades mais comuns em aplicações C# (.NET) que desenvolvedores iniciantes enfrentam. Você aprenderá como detectá-las e, principalmente, como proteger seu código.

\n\n

1. Injeção SQL (SQL Injection)

\n\n

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

\n\n

Código vulnerável:

\n
string userName = Request["username"];\nstring query = "SELECT * FROM Users WHERE Name = '" + userName + "'";\nSqlCommand cmd = new SqlCommand(query, connection);
\n\n

Proteção: Use consultas parametrizadas ou Entity Framework.

\n
string userName = Request["username"];\nstring query = "SELECT * FROM Users WHERE Name = @name";\nSqlCommand cmd = new SqlCommand(query, connection);\ncmd.Parameters.AddWithValue("@name", userName);
\n\n

2. Cross-Site Scripting (XSS)

\n\n

Os ataques XSS permitem que um invasor insira um script malicioso em uma página que é exibida para outros usuários.

\n\n

Código vulnerável:

\n
string comment = Request["comment"];\nResponse.Write("<div>" + comment + "</div>");
\n\n

Proteção: Sempre codifique a saída. Use HttpUtility.HtmlEncode():

\n
string comment = Request["comment"];\nResponse.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");
\n\n

3. Falta de autenticação e autorização

\n\n

Muitos iniciantes esquecem de verificar as permissões de acesso aos recursos. Por exemplo, um usuário pode acessar o perfil de outro simplesmente alterando o ID na URL.

\n\n

Código vulnerável:

\n
public IActionResult Profile(int userId)\n{\n    var user = _context.Users.Find(userId);\n    return View(user);\n}
\n\n

Proteção: Sempre verifique se o usuário atual tem direito ao recurso solicitado:

\n
public IActionResult Profile(int userId)\n{\n    var currentUserId = User.FindFirst(ClaimTypes.NameIdentifier).Value;\n    if (userId != currentUserId) return Forbid();\n    var user = _context.Users.Find(userId);\n    return View(user);\n}
\n\n

4. Vazamento de dados confidenciais por meio de exceções

\n\n

Desenvolvedores frequentemente exibem informações completas sobre erros, incluindo a pilha de chamadas e strings de conexão.

\n\n

Código vulnerável:

\n
try\n{\n    // código\n}\ncatch (Exception ex)\n{\n    Response.Write(ex.ToString()); // PERIGOSO!\n}
\n\n

Proteção: Em produção, use mensagens de erro genéricas e registre os detalhes em um local seguro:

\n
try\n{\n    // código\n}\ncatch (Exception ex)\n{\n    _logger.LogError(ex, "Erro ao processar a requisição");\n    return StatusCode(500, "Ocorreu um erro interno do servidor");\n}
\n\n

5. Armazenamento inseguro de senhas

\n\n

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

\n\n

Código vulnerável:

\n
string passwordHash = MD5.Hash(password); // NÃO PODE!
\n\n

Proteção: Use algoritmos modernos de hash com salt, como BCrypt ou ASP.NET Core Identity:

\n
var passwordHasher = new PasswordHasher<IdentityUser>();\nstring passwordHash = passwordHasher.HashPassword(user, password);
\n\n

6. Proteção insuficiente contra CSRF (Cross-Site Request Forgery)

\n\n

Ataque em que o invasor força o navegador da vítima a executar uma ação indesejada em outro site, onde

Blogs

Book Recommendations