WordPress es, hasta la fecha, el CMS más popular con más del 30% de cuota de mercado de la web. Con tal cantidad de cuota de mercado, WordPress a menudo se convierte en blanco de amenazas de seguridad. Entonces, para el propietario de un sitio de WordPress, es mejor tomar algunas medidas para reforzar la seguridad de su sitio.
Como miles de sitios web se ejecutan en Nginx, he recopilado algunos consejos básicos o Nginx reglas para fortalecer la seguridad de su sitio de WordPress. Vamos a ver.
Lea también: 10 consejos para fortalecer la seguridad de WordPress
1. Limite el acceso XMLRPC
El punto final XMLRPC en WordPress se usa para permitir que una aplicación externa interactúe con los datos de WordPress. Por ejemplo, puede permitir agregar, crear o eliminar una publicación. Sin embargo, XMLRPC también es un vector de ataque común donde el atacante puede ser capaz de realizar esas operaciones sin autorización. Es mejor permitir solicitud a XMLRPC desde IP autorizada que confíes, así:
location ~* /xmlrpc.php$ { allow 172.0.1.1; deny all; }
Una vez que se agrega lo anterior, debería ver el Respuesta del código de error 403 al cargar xmlrpc.php
en el navegador.
2. Limite los tipos de solicitudes
La mayoría de las veces, su sitio web solo puede realizar dos tipos de solicitudes, es decir GET
para recuperar datos de su sitio y POST
para cargar datos a su sitio Limitar el tipo de solicitud que nuestro sitio puede manejar a solo estos dos suena como una buena idea aquí.
if ($request_method !~ ^(GET|POST)$ ) { return 444; }
3. Acceso directo a archivos PHP
Si de alguna manera, un pirata informático introduce con éxito un archivo PHP en su sitio, podrá ejecutar este archivo cargándolo, lo que efectivamente se convierte en una puerta trasera para infiltrarse en su sitio. Deberíamos deshabilite el acceso directo a cualquier archivo PHP añadiendo las siguientes reglas:
location ~* /(?:uploads|files|wp-content|wp-includes|akismet)/.*.php$ { deny all; access_log off; log_not_found off; }
4. Archivos de puntos
Similar al archivo PHP, un archivo de puntos como .htaccess
, .user.ini
y .git
puede contener información sensible. Para estar en el lado más seguro, es mejor deshabilitar el acceso directo a estos archivos.
location ~ /.(svn|git)/* { deny all; access_log off; log_not_found off; } location ~ /.ht { deny all; access_log off; log_not_found off; } location ~ /.user.ini { deny all; access_log off; log_not_found off; }
5. Ocultar la versión de Nginx y PHP
Es mejor que cierta información no se exponga, como la versión de Nginx y la versión de PHP. Esto no evitará el ataque en sí. Sin embargo, suponiendo que una versión particular de Ningx o PHP tenga una vulnerabilidad expuesta, el atacante no podrá conocerlo fácilmente desde su sitio. Para ocultar la versión de Nginx:
#Hide the nginx version. server_tokens off;
#Hide the PHP version. fastcgi_hide_header X-Powered-By; proxy_hide_header X-Powered-By;
6. Cabeceras de seguridad
Los encabezados de seguridad proporcionan una capa adicional de seguridad al dictar el comportamiento del navegador. El X-Frame-Options
, por ejemplo, evitará que su sitio se cargue desde un iframe, a menos que sea desde su propio sitio. El Strict-Transport-Security
voluntad obligar al navegador a cargar su sitio desde HTTPS.
add_header X-Frame-Options SAMEORIGIN; add_header Strict-Transport-Security "max-age=31536000"; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block";
7. Bloquear acceso a subdirectorios
Si su sitio se ejecuta en un subdirectorio como /blog
es mejor permitir el acceso a este subdirectorio. Significa que cualquier acceso oscuro a otros directorios que un atacante siempre busca, por ejemplo, /82jdkj/?.php
están bloqueados.
location ~ ^/(?!(blog)/?) { deny all; access_log off; log_not_found off; }
8. Reducir el correo no deseado
Comentarios de spam, aunque es posible que no rompa su sitio, inundará su base de datos con contenido basura o contenido malicioso que posiblemente podría aprovecharse como un vector. A reducir las entradas de spampuede agregar las siguientes reglas a su configuración de Nginx junto con un complemento de protección contra correo no deseado como Akismet.
set $comment_flagged 0; set $comment_request_method 0; set $comment_request_uri 0; set $comment_referrer 1; if ($request_method ~ "POST"){ set $comment_request_method 1; } if ($request_uri ~ "/wp-comments-post.php$"){ set $comment_request_method 1; } if ($http_referer !~ "^https?://(([^/]+.)?site.com|jetpack.wordpress.com/jetpack-comment)(/|$)"){ set $comment_referrer 0; } set $comment_flagged "${comment_request_method}${comment_request_uri}${comment_referrer}"; if ($comment_flagged = "111") { return 403; }
9. Solicitudes de límite
La página de inicio de sesión de WordPress, wp-login.php
, es un punto final común para un ataque de fuerza bruta. El el atacante intentará atravesar su sitio enviando múltiples combinaciones de nombre de usuario y contraseña y esto generalmente se hace varias veces en un segundo.
Para esto, podemos aplicar una regla que limitará la cantidad de solicitudes que la página puede manejar por segundo. Aquí nosotros establece el límite en 2 solicitudes por segundode lo contrario, la solicitud será bloqueada.
limit_req_zone $binary_remote_addr zone=WPRATELIMIT:10m rate=2r/s; location ~ wp-login.php$ { limit_req zone=WPRATELIMIT; }
10. Deshabilitar el listado de directorios
Por último, pero no menos importante, debe deshabilitar la lista de directorios para que el atacante no sepa qué hay en el directorio. Hay muy pocas razones por las que sé dónde la lista de directorios es útil en un sitio de WordPress.
autoindex off;