Proteger WordPress de ataques SQLi

A continuación veremos cómo proteger WordPress de ataques SQLi (SQL Injection). En el último post hicimos referencia a nuestra ponencia sobre seguridad en WordPress en el evento que se celebró en Córdoba el pasado 6 de octubre, la WordPress Meetup Córdoba 2012. Siguiendo con esta temática, en www.hacking-etico.com queremos hablar acerca de cómo podríamos mantener más seguro nuestro sitio Web WordPress.

Como ya se ha comentado en otros post, las vulnerabilidades en las aplicaciones Web y el software en general, juegan un papel muy importante en la seguridad de un sistema. La mayoría de los ataques tienen éxito y se articulan casi todos aprovechando algún tipo de vulnerabilidad en el sistema. En el caso de WordPress, el núcleo es bastante seguro, y la comunidad de desarrolladores que hay detrás cuidan este asunto, pero la cosa cambia cuando se trata de plugins de terceros.

Aún así, además de intentar mantener siempre actualizados nuestro plugins y el propio núcleo de WordPress, podemos poner algunos remedios preventivos para no ser víctimas de un ataque.

Aquí os dejo una muestra, utilizando directivas de restricción de nuestrio sitio Web, podemos denegar el acceso a ciertas URL o a ciertas peticiones URL que tengan un patrón definido. Con el fichero .htaccess podemos protegernos de los ataques SQLi más comunes. A continuación se muestra el código que tenemos que incluir en nuestro .htaccess:

<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} ^.*("|'|<|>|\|{||).* [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>

IMPORTANTE: estas reglas de htaccess son sólo un ejemplo de cómo podríamos inspeccionar las distintas peticiones URL en busca de peticiones «sospechosas» tipo SQLi, XSS…

Fuente: pastie.org

¡Espero que es os sirva!