El fichero .htaccess es la primera barrera que puedes usar en un sistema basado en servidores Linux con Apache, pues dispone de una buena cantidad de reglas que podemos aplicar y, gracias a ello, y como es el caso de hoy, proteger WordPress de hackers.

El siguiente código, añadido al archivo .htaccess de tu instalación (fichero oculto situado en la carpeta raíz) evitará un buen montón de sistemas habituales de inyectar código y hackear WordPress.

Simplemente añade estas líneas, no solo ayudarás a proteger tu wordpress sino también optimizarás un poco más su rendimiento:

#Protección del propio archivo .htaccess
<Files ~ «^.*\.([Hh][Tt][Aa])»>
order allow,deny
deny from all
satisfy all
</Files>

#Protección de los archivos license.txt, readme.html y wp-config.php
<FilesMatch «^(license|readme|wp-config|wp-config-sample).*$»>
order allow,deny
deny from all
</FilesMatch>

#Desactivar la navegación por directorios
Options All -Indexes

#Desactivar la firma del servidor
ServerSignature Off

#BEGIN Seguridad contra hacking e Injections
# sin acceso a proc/self/environ
RewriteCond %{QUERY_STRING} proc/self/environ [OR]

# bloquear cualquier script que trate de establecer un valor mosConfig a través de una URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]

# bloquear cualquier script que trate de colocarte código codificado base64_encode a través de una URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]

# bloquea cualquier script que incluya la tag <script> en la URL
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]

# bloquea cualquier script que trate de establecer la variable PHP GLOBALS a través de una URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]

# bloquea cualquier script que trate de modificar una variable _REQUEST a través de una URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})

# manda a todas las peticiones bloqueadas a la página principal con un error de 403 Prohibido
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^(.*)$ index.php [F,L]
#END Seguridad contra hacking e Injections

#BEGIN Caché de archivos
<IfModule mod_expires.c>
ExpiresActive on

# Por defecto 1 mes de caché
ExpiresDefault «access plus 1 month»

# El HTML nunca debe de ser cacheado, así como los datos dinámicos
ExpiresByType text/html «access plus 0 seconds»
ExpiresByType text/xml «access plus 0 seconds»
ExpiresByType application/xml «access plus 0 seconds»
ExpiresByType application/json «access plus 0 seconds»
ExpiresByType application/ld+json «access plus 0 seconds»
ExpiresByType application/vnd.geo+json «access plus 0 seconds»

# HTML components (HTCs)
ExpiresByType text/x-component «access plus 1 month»

# Favicon
ExpiresByType image/x-icon «access plus 3 months»

# Imágenes, vídeo, audio: 1 mes
ExpiresByType image/gif «access plus 1 month»
ExpiresByType image/png «access plus 1 month»
ExpiresByType image/jpeg «access plus 1 month»
ExpiresByType video/ogg «access plus 1 month»
ExpiresByType audio/ogg «access plus 1 month»
ExpiresByType video/mp4 «access plus 1 month»
ExpiresByType video/webm «access plus 1 month»

# Fuentes web: 1 mes
ExpiresByType application/font-woff «access plus 1 month»
ExpiresByType application/font-woff2 «access plus 1 month»
ExpiresByType application/x-font-woff «access plus 1 month»
ExpiresByType application/x-font-ttf «access plus 1 month»
ExpiresByType font/opentype «access plus 1 month»
ExpiresByType image/svg+xml «access plus 1 month»
ExpiresByType application/vnd.ms-fontobject «access plus 1 month»

# CSS y JavaScript: 1 mes
ExpiresByType text/css «access plus 1 month»
ExpiresByType text/javascript «access plus 1 month»
ExpiresByType application/javascript «access plus 1 month»
ExpiresByType application/x-javascript «access plus 1 month»
ExpiresByType text/plain «access plus 1 month»
</IfModule>

# Eliminar E-Tag
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
FileETag None
#END Caché de archivos

#BEGIN Compresión GZIP
<IfModule mod_deflate.c>
# Force compression for mangled headers.
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding «gzip,deflate» env=HAVE_Accept-Encoding
</IfModule>
</IfModule>

<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/x-component
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddType x-font/otf .otf
AddType x-font/ttf .ttf
AddType x-font/eot .eot
AddType x-font/woff .woff
AddType image/x-icon .ico
AddType image/png .png
</IfModule>
</IfModule>
#END Compresión GZIP

 

Guarda los cambios y vivirás más tranquilo pues te habrás quitado un buen montón de amenazas.