La seguridad en una web es importante. No paro de asombrarme cómo mucha gente pasa horas esmerándose en el diseño y en la usabilidad de su web, y después no dedica ni un sólo minuto a la seguridad, sin darse cuenta de que eso puede hacer que todo se pierda en un segundo.
Y claro, si en cualquier web es un aspecto importante, cuando se trata de una tienda online (que normalmente es un medio de vida, una fuente de ingresos) puede llegar a ser vital. Así que vamos a repasar una serie de pasos que puedes dar para mejorar la seguridad de tu tienda con WooCommerce.
Tabla de contenidos
Cuidado con el nombre de usuario del administrador
El 90% de los hackeos son causados, o mejor dicho propiciados (consciente o inconscientemente), por el propio administrador. El desconocimiento e incluso a veces la desidia hace que facilitemos a los hackers la tarea de hacerse con el control de nuestra tienda y que puedan usarla para inyectar software malicioso, generar spam web o convertirla en una granja de enlaces.
Deberías darte bien fuerte con la cabeza contra un muro si:
- El usuario «admin» existe en tu web y tiene privilegios de administrador
- El nombre de usuario del administrador es el mismo que el nombre o el dominio de la tienda (como si yo aquí usara «enriquejros»)
- Si usas la misma contraseña para administrar tu web que para acceder a decenas de otros sitios de internet
En fin, hay más recomendaciones, pero ya las conoces, porque las habrás visto mil veces y porque son de sentido común. Pero quiero hacer hincapié en las que hacen referencia al nombre de usuario, ya que es especialmente frecuente ver cosas como esas.
Si el nombre de usuario que utilizas es admin o el mismo que el nombre de la tienda o el dominio, deberías estar cambiándolo ya, ahora mismo.
Aunque no es exactamente «cambiarlo», ya que el nombre de usuario no puede cambiarse: el procedimiento correcto para hacerlo sería:
- Hacer copia de seguridad (siempre, siempre, siempre, antes de hacer cualquier cosa)
- Crear un nuevo usuario para administración, con un username más seguro, y darle privilegios de administración
- Iniciar sesión con este nuevo administrador y eliminar el antiguo
- Cuando pregunte qué hacer con el contenido generado por el usuario que estás eliminando, asignárselo a tu nuevo usuario administrador
- Limitando los intentos de login
- Ocultando los mensajes de error
- Accede mediante FTP o a través del gestor de archivos de tu hosting y elimina el archivo readme.html que está en la raiz de la web (en el mismo directorio que las carpetas wp-content, wp-admin y wp-includes)
- Evita que la metaetiqueta generator se muestre en el código fuente
Ni que decir tiene que para este usuario deberías usar una contraseña segura. Si ya la usas en algún otro sitio, no es segura. Si la buscas en Google y aparece un sólo resultado, no es segura.
Mantén tu web actualizada
La respuesta suele ser siempre la misma: es que si actualizo algo a lo mejor deja de funcionar. Webs con WordPress 4.7 o con WooCommerce 2.6 (¡incluso 2.3!) y con listas interminables de actualizaciones pendientes.
Pues déjame decirte algo: no merece la pena. En primer lugar por la seguridad, que es a lo que vamos hoy. Prácticamente todas las semanas alguno de los clientes de mi servicio de mantenimiento reciben un ataque que intenta explotar alguna vulnerabilidad conocida de versiones antiguas de WordPress o de algún plugin.
Un ejemplo reciente de una serie de ataques intentando explotar una vulnerabilidad (ya parcheada) del plugin User Pro (todos ellos procedentes del mismo atacante, «saltando» de una IP a otra):
Por supuesto, las webs de mis clientes no sólo están actualizadas sino que también están protegidas ante esta clase de ataques, pero ¿imaginas qué habría pasado si hubiera tenido ese plugin sin actualizar y una seguridad descuidada?
Pues eso: no cometas el error de pensar que las actualizaciones no son más que una molestia. ¡Es imprescindible que la web esté al día de actualizaciones!
Instala un plugin de seguridad
Precisamente la protección ante ataques como ése la proporciona un buen plugin de seguridad, mejor aún si cuenta con un cortafuegos. Yo siempre utilizo Wordfence Security, tanto en las webs de mis clientes como en las mías propias.
Esto te ahorra muchos quebraderos de cabeza (de hecho comprobarás que bastantes de las cosas de esta lista quedan resueltas con un buen plugin de este tipo) y, aunque inevitablemente baje unos puntos en PageSpeed permite dormir a pierna suelta.
Por supuesto, no basta con instalarlo y activarlo, ¡eso sirve de muy poco! Hay que configurarlo correctamente, adaptando los ajustes a las necesidades de tu web.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Protege el login
No, no me estoy refiriendo a instalar uno de esos plugins que cambian la URL del formulario de login por una personalizada. Este tipo de plugins sirven más bien de poco, ya que si alguien tiene los suficientes conocimientos para acceder a tu web de manera ilícita, los tendrá también para localizar ese formulario. Por el contrario, si el atacante es detenido por cambiar el login de sitio es, simplemente, que no era una amenaza.
No, el login hay que protegerlo de dos formas diferentes pero complementarias:
Limitar el número de intentos fallidos de login es vital para detener los llamados ataques de fuerza bruta o ataques por diccionario, en los que un atacante intenta (mediante un script automatizado) probar una a una todas las contraseñas contenidas en un enorme listado de passwords, que puede contener miles de ellas (de ahí lo de de diccionario).
Así que aquí volvemos a lo que hablábamos al principio sobre el nombre de usuario del administrador: si usamos algo como «admin» el usuario no tendrá dificultad en conseguir esta primera parte del login para lanzar su ataque.
Por el contrario, si ocultamos los mensajes de error ponemos las cosas aún más difíciles. Fíjate en esto:
ERROR: La contraseña que has introducido para el usuario admin es incorrecta
Un simple mensaje de error que da una información vital: el nombre de usuario «admin» es correcto, existe en el sistema. Ahora sólo falta lanzar un ataque de diccionario sobre ese usuario. Sin embargo si mostramos siempre el mismo error (en mi caso muestro siempre ERROR: Nombre de usuario no válido, aunque sea válido) estamos evitando dar información y poniendo las cosas difíciles a «los malos».
Hacer algo así es sencillo con un buen plugin de seguridad, como el anteriormente mencionado Wordfence Security o como iThemes Security. También puedes personalizar tu propio mensaje usando el filtro de WordPress login_errors, con un código como éste:
add_filter ('login_errors', function () { return "ERROR: Nombre de usuario o contraseña incorrectos"; });
Sólo un apunte: ten en cuenta a los usuarios reales a la hora de limitar el número de intentos, ¡algunos tienen muy poca memoria, y no queremos estar bloqueando usuarios reales continuamente!
Yo habitualmente configuro un límite de cinco intentos, con un bloqueo de cinco o diez minutos tras esos cinco fallos. Muy torpe ha de ser un usuario para intentarlo cinco veces y fallar y, en caso de suceder, puede volver a intentarlo en unos minutos. Sin embargo imagina intentar «reventar» una contraseña probando miles de palabras, si cada cinco de intentos te cuestan diez minutos de espera.
Oculta la versión de WordPress que utilizas
Repito: WordPress debería estar actualizado siempre, así que la versión de WordPress que estés utilizando debería ser siempre la última publicada. Pero, al margen de esto, lo tengas o no al día, oculta la versión que usas: eso da información importante.
Hay dos formas muy fáciles de saber qué versión de WordPress utiliza una web: basta con acceder al dichoso archivo readme.html (tuweb.com/readme.html) o con buscar en el código fuente la metaetiqueta generator.
Y la cuestión es ésta: sabiendo la versión de WordPress que está en uso, si no es la última, se puede saber qué vulnerabilidades contenía (ya que éstas se hacen públicas en las listas de actualizaciones por versiones), con lo que el atacante puede saber qué exploits son efectivos contra la web.
Obligatorio:
Este último punto lo puedes conseguir (de nuevo) con la ayuda de un plugin de seguridad o bien haciendo uso del filtro the_generator con el siguiente código:
add_filter ('the_generator', function () { return ""; });
Por cierto, que así eliminas también el generator de WooCommerce, por lo que también ocultas la versión de Woo que tienes en uso.
Protege el archivo wp-config
El archivo wp-config.php es vital para la seguridad: en el consta, en texto plano, el nombre de la base de datos y los datos de acceso (usuario y contraseña) a la misma, así que imagínate.
Normalmente este archivo está protegido por defecto y no se puede acceder a él directamente, pero no está de más darle una protección adicional: al fin y al cabo se trata de ponerle las cosas difíciles a los hackers. Es bastante sencillo hacerlo añadiendo esta directiva al archivo .htaccess:
order allow,deny deny from all
Conclusión
Seis simples puntos, que además parecen de sentido común, ¿verdad? Sí, es cierto que se pueden hacer muchas más cosas como bloquear el acceso a directorios u otras técnicas más avanzadas. Pero la neurosis tampoco es sana 🙂 Con estas sencillas precauciones tu web será más segura que el 99% de las webs que veo cada día.
angel dice
Genial como siempre y además necesario. Gracias
Enrique J. Ros dice
Gracias a ti por tu comentario, Ángel. Me alegra que te haya sido útil 🙂
Un saludo.
Tomás dice
Fantásticas recomendaciones para reforzar la seguridad Enrique.
Este código:
add_filter (‘the_generator’, function () {
return «»;
});
¿Se implementa en nuestro plugin de funciones?
Un saludo.
Enrique J. Ros dice
Hola Tomás
Gracias por tu comentario. Sí, por supuesto, si ya tienes un plugin de funciones puedes añadir el filtro a él.
Un saludo.