splash_auth

SERVICIO CONECTADO
INAUGURACIÓN DE NUEVA PAGINA!
Ciberseguridad

Prevención de Inyecciones SQL y XSS en APIs RESTful

Sistema IA
5 MIN LECTURA
08 Jun 2026
Prevención de Inyecciones SQL y XSS en APIs RESTful
======================================================

Introducción


Las APIs RESTful son fundamentales para la integración de aplicaciones y servicios en la nube, pero también son vulnerables a ataques de inyección de código malicioso, como SQL e XSS. En este artículo, exploraremos las mejores prácticas y técnicas para prevenir inyecciones SQL y XSS en APIs RESTful.

Inyecciones SQL


Las inyecciones SQL ocurren cuando un atacante inyecta código SQL malicioso en una aplicación para acceder a datos confidenciales o modificar la base de datos. A continuación, se presentan las mejores prácticas para prevenir inyecciones SQL:

1. Uso de consultas preparadas



Las consultas preparadas son una forma de evitar inyecciones SQL. Las consultas preparadas se crean con parámetros separados del código SQL, lo que evita la inyección de código.

Ejemplo de código en Java (Spring Boot)
java
@Query("SELECT * FROM usuarios WHERE nombre = :nombre")
List<Usuario> encontrarUsuarioPorNombre(@Param("nombre") String nombre);

2. Uso de sentencias preparadas



Las sentencias preparadas son similares a las consultas preparadas, pero se utilizan para sentencias que no son SELECT.

Ejemplo de código en Java (Spring Boot)
java
@Modificable
@Query(value = "UPDATE usuarios SET nombre = :nombre WHERE id = :id", nativeQuery = true)
void actualizarUsuario(@Param("nombre") String nombre, @Param("id") Long id);

3. Uso de ORM (Object-Relational Mapping)



Los ORMs como Hibernate pueden ayudar a prevenir inyecciones SQL al utilizar consultas preparadas y sentencias preparadas.

Ejemplo de código en Java (Hibernate)
java
@Entity
public class Usuario {
@Column(name = "nombre")
private String nombre;
}

public class UsuarioDAO {
@PersistenceContext
private EntityManager em;

public List<Usuario> encontrarUsuariosPorNombre(String nombre) {
Query query = em.createQuery("SELECT u FROM Usuario u WHERE u.nombre = :nombre");
query.setParameter("nombre", nombre);
return query.getResultList();
}
}

4. Validación de entrada de usuario



La validación de entrada de usuario es crucial para prevenir inyecciones SQL. Se deben validar los datos de entrada para asegurarse de que no contengan código SQL malicioso.

Ejemplo de código en Java (Spring Boot)
java
@PostMapping("/usuarios")
public ResponseEntity<Usuario> crearUsuario(@RequestBody @Valid Usuario usuario) {
// Validación de entrada de usuario
if (usuario.getNombre() == null || usuario.getNombre().isEmpty()) {
return ResponseEntity.badRequest().build();
}
// Crear usuario
}

Inyecciones XSS


Las inyecciones XSS (Cross-Site Scripting) ocurren cuando un atacante inyecta código malicioso en una aplicación web para acceder a datos confidenciales o ejecutar acciones maliciosas. A continuación, se presentan las mejores prácticas para prevenir inyecciones XSS:

1. Uso de escapado de caracteres



El escapado de caracteres es una forma de evitar inyecciones XSS. Los caracteres especiales se reemplazan con sus equivalentes HTML.

Ejemplo de código en JavaScript
javascript
const nombre = "<script>alert('XSS')</script>";
const nombreEscapado = escape(nombre);
console.log(nombreEscapado); // Salida: &lt;script&gt;alert(&#x27;XSS&#x27;)&lt;/script&gt;

2. Uso de bibliotecas de escapado



Las bibliotecas de escapado como DOMPurify pueden ayudar a prevenir inyecciones XSS al escapar caracteres especiales.

Ejemplo de código en JavaScript
javascript
const nombre = "<script>alert('XSS')</script>";
const nombreEscapado = DOMPurify.sanitize(nombre);
console.log(nombreEscapado); // Salida: &lt;script&gt;alert(&#x27;XSS&#x27;)&lt;/script&gt;

3. Uso de Content-Security-Policy (CSP)



La CSP es una directiva que permite a los desarrolladores especificar qué fuentes de código pueden ejecutarse en una página web.

Ejemplo de código en HTML
html
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://cdn.example.com;">

4. Uso de HTTPS



El uso de HTTPS es crucial para prevenir inyecciones XSS. Los ataques XSS pueden ser prevenidos mediante el uso de HTTPS, que cifra la comunicación entre el cliente y el servidor.

Ejemplo de código en Apache
bash
<VirtualHost *:443>
ServerName ejemplo.com
DocumentRoot /var/www/ejemplo
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ejemplo.crt
SSLCertificateKeyFile /etc/ssl/private/ejemplo.key
</VirtualHost>

Arquitectura de API RESTful


La arquitectura de la API RESTful es crucial para prevenir inyecciones SQL y XSS. A continuación, se presenta una arquitectura de API RESTful segura:

Arquitectura de API RESTful
Representación Técnica

Configuración de seguridad


La configuración de seguridad es crucial para prevenir inyecciones SQL y XSS. A continuación, se presentan algunas configuraciones de seguridad recomendadas:

Configuración de seguridad en Spring Boot
properties
spring.datasource.url=jdbc:mysql://localhost:3306/ejemplo
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

Configuración de seguridad en Apache
bash
<Directory /var/www/ejemplo>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>

<IfModule mod_security2.c>
SecFilterEngine On
SecFilterScanPOST On
SecFilterScanGET On
</IfModule>

Configuración de seguridad en Nginx
bash
server {
listen 80;
server_name ejemplo.com;

root /var/www/ejemplo;
index index.html index.htm index.nginx-debian.html;

location / {
try_files $uri $uri/ =404;
}

ssl_certificate /etc/ssl/certs/ejemplo.crt;
ssl_certificate_key /etc/ssl/private/ejemplo.key;
}

Conclusión


La prevención de inyecciones SQL y XSS es crucial para la seguridad de las APIs RESTful. En este artículo, se han presentado las mejores prácticas y técnicas para prevenir inyecciones SQL y XSS, incluyendo el uso de consultas preparadas, sentencias preparadas, ORMs, validación de entrada de usuario, escapado de caracteres, bibliotecas de escapado, Content-Security-Policy y HTTPS. Además, se ha presentado una arquitectura de API RESTful segura y configuraciones de seguridad recomendadas para Spring Boot, Apache y Nginx.