Seguridad de aplicaciones C#: top 10 vulnerabilidades para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Seguridad de aplicaciones C#: Top 10 vulnerabilidades para principiantes

La seguridad del software es una de las tareas clave del desarrollador. Incluso una aplicación pequeña en C# puede convertirse en un objetivo para los atacantes si no se tienen en cuenta las vulnerabilidades comunes. En este artículo, analizaremos las 10 vulnerabilidades más peligrosas de C# (.NET) que enfrentan los desarrolladores principiantes. Aprenderá cómo surgen, cómo se explotan y, lo más importante, cómo protegerse de ellas.



1. Inyección SQL (SQL Injection)

Esta es una de las vulnerabilidades más antiguas y peligrosas. Ocurre cuando la entrada del usuario se concatena directamente en una consulta SQL.

Ejemplo de código vulnerable:

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

Cómo atacan: Un atacante puede pasar al parámetro user el valor ' OR 1=1 --, lo que devolverá todos los registros de la tabla.

Protección: Utilice 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)

La vulnerabilidad XSS permite inyectar código JavaScript malicioso en una página que se muestra a otros usuarios.

Ejemplo de código vulnerable (ASP.NET WebForms):

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

Protección: Siempre codifique la salida. Utilice HttpUtility.HtmlEncode() o la sintaxis Razor (@), que codifica automáticamente los datos.

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


3. Deserialización insegura

Al deserializar datos de una fuente no confiable (por ejemplo, de una solicitud o archivo), un atacante puede ejecutar código arbitrario en el servidor.

Ejemplo de código vulnerable (BinaryFormatter):

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

Protección: Utilice serializadores modernos (JSON, XML con restricciones), verifique los tipos y nunca deserialice datos de clientes no confiables. Evite BinaryFormatter, SoapFormatter y LosFormatter.



4. Deficiencias en la autenticación y gestión de sesiones

Esto incluye contraseñas débiles, falta de límite en el número de intentos de inicio de sesión, cookies de sesión no protegidas.

Ejemplo de vulnerabilidad: Cookie de sesión sin las banderas HttpOnly y Secure.

Protección:

  • Utilice Identity o ASP.NET Core Identity.
  • Configure la cookie: HttpOnly, Secure, SameSite=Strict.
  • Active el límite en el número de intentos de inicio de sesión (Account Lockout).
  • Utilice HTTPS.
services.ConfigureApplicationCookie(options =>{    options.Cookie.HttpOnly = true;    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;    options.Cookie.SameSite = SameSiteMode.Strict;});


5. Cross-Site Request Forgery (CSRF)

Un ataque en el que un atacante obliga a un usuario autenticado a realizar una acción no deseada en el sitio (por ejemplo, transferir dinero).

Protección: Utilice tokens antifalsificación (Anti-Forgery Tokens). En ASP.NET Core esto se hace automáticamente al usar la etiqueta <form> con asp-antiforgery.

Blogs

Book Recommendations