¿Qué es una Inyección SQL?

Para entender que es una inyección SQL, debemos entender algunos conceptos básicos.

Cada sitio de WordPress esta compuesto de carpetas, archivos y de una base de datos.

Un hacker puede ingresar un código malicioso por medio de un formulario en tu sitio, especialmente cuando los campos de un formulario no están configurados apropiadamente.

Si tu sitio es vulnerable a una inyección SQL, un hacker puede agregar, modificar, solicitar y remover información de tu base de datos.

Una inyección SQL puede suceder en cualquier momento siempre y cuando tengas un formulario en tu sitio.

Los formularios para realizar una inyección SQL que puedes encontrar en tu sitio son:

  • Formulario de acceso
  • Barra de búsqueda
  • Formularios de contacto
  • Portales de acceso
  • Formularios para comentarios
  • Suscripciones Popups
  • Formularios de checkout de comercio en linea

Tipos de Inyecciones SQL

Los hackers pueden realizar dos cosas si logran encontrar una vulnerabilidad en los formularios de tu sitio.

SQLI Clásico

Este tipo de inyecciones SQL devolverán datos al navegador del hacker. Básicamente, utilizan formularios para consultar la base de datos del sitio web, tal como lo haría usted o WordPress.

Este tipo de consultas pueden revelar información sobre lo que hay dentro de la base de datos con el fin de robar información confidencial.

También pueden revelar la estructura de la base de datos en sí, lo que hace que lanzar un ataque contra un sitio web sea mucho más fácil.

SQLI a Ciegas

Este tipo de inyecciones SQL no devuelve ningún dato en absoluto. Es por eso que estos son intentos “ciegos”.

En cambio, el hacker usará esta inyección para ejecutar varias acciones dentro de la base de datos (como eliminar todos los datos).

Cómo Prevenir una Inyección SQL

Hay maneras de prevenir una Inyección SQL

  • Usar plugins y temas de buena reputación.
  • Mantener wordpress, temas y plugins actualizados.
  • Usar hosting que tengan las últimas versiones de PHP Y SQL.
  • Restringir los campos de entrada en formularios.
  • Cambiar el prefijo de la base de datos.
  • Reducir el número de hackers y bots que visitan tu sitio mediante la implementación de un Cortafuegos Web (WAF)

Proteger tu Sitio contra Inyecciones SQL

Jeff Star de Perishable Press y de WP-Mix recomienda añadir este código en el .HTACCESS para proteger tu sitio contra inyecciones SQL.

# Protect against SQL Injection
# @ https://wp-mix.com/protect-against-sql-injection/
<IfModule mod_rewrite.c>
	RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
	RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR]
	RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR]
	RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR]
	RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR]
	RewriteCond %{QUERY_STRING} (\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR]
	RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,22}(=|%3D) [NC,OR]
	RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
	RewriteCond %{QUERY_STRING} (\'|\")(.*)(drop|exec|insert|md5|select|union) [NC]
	RewriteRule .* - [F]
</IfModule>

Este es otro código proporcionado por ThriveWP y que se puede agregar a tu archivo HTACCESS para protegerte de inyecciones SQL.

# Protect Against SQL Injection
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini [NC,OR]
RewriteCond %{QUERY_STRING} tag\= [NC,OR]
RewriteCond %{QUERY_STRING} ftp\:  [NC,OR]
RewriteCond %{QUERY_STRING} http\:  [NC,OR]
RewriteCond %{QUERY_STRING} https\:  [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|ê|"|;|\?|\*|=$).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare).* [NC]
RewriteCond %{HTTP_COOKIE} !^.*WordPress_logged_in_.*$
RewriteRule ^(.*)$ - [F,L]
</IfModule>

Kinsta, uno de los mejores proveedores hosting para wordpress gestionado recomienda la aplicación del siguiente código en el archivo htaccess.

Asegurate que las palabras indicadas no sean parte de la URL para que no sean bloqueadas

RewriteCond %{QUERY_STRING} [^a-z](declare¦char¦set¦cast¦convert¦delete¦drop¦exec¦insert¦meta¦script¦select¦truncate¦update)[^a-z] [NC]
RewriteRule (.*) - [F]

¿Un SQL Injection Scanner Recomendado?

Puedes probar si tu sitio tiene algún tipo de vulnerabilidad que permitiría un ataque SQL:

SQL Injection Scanner

Tambien puedes descargar de GitHub o desde el sitio sqlmap.org, una herramienta que automatiza el proceso de encontrar vulnerabilidades en tu sitio para realizar inyecciones SQL.

Más Información sobre Seguridad