Mejorando la instalación

Ahora vamos a mejorar nuestra instalación quitando toda la información que no hay que dejar al descubierto y optimizar el rendimiento quitando aquellas cosas que no necesitamos.

Versión de WordPress y links del <head>

Lo primero que vamos a hacer es ocultar la versión de nuestro WordPress, debemos de tener instalada la ultima versión aun así nadie tiene por que saber que versión usamos. Lo primero sera buscar

<?php bloginfo('version'); ?>

en el “header.php” de nuestro tema y la borraremos, además también es recomendable añadir estas líneas en el “functions.php” del tema para cambiar el número de versión por otra cosa:

function inloop_remove_version() {
return 'Game Boy Color 1998';
}
add_filter('the_generator', 'inloop_remove_version');

Donde pone ‘game boy color 1998’ pon lo que quieras o dejarlo vacio

O lo podemos eliminar con:

remove_action( 'wp_head', 'wp_generator' );

Para optimizar un poco mas tambien quitaremos estos enlaces que se incluyen en el <head> añadiendo las siguientes lineas al “functions.php”

remove_action( 'wp_head', 'wlwmanifest_link' ); 
remove_action( 'wp_head', 'rsd_link' );

y los link alternativos al RSS feed

remove_action( 'wp_head', 'feed_links', 2 ); 
remove_action( 'wp_head', 'feed_links_extra', 3 );

Otro sitio donde aparece la versión es en el archivo “readme.html” que esta en la raiz de la instalación, lo borraremos o lo editaremos, este archivo se volvera a crear cuando actualicemos WordPress, no olvideis borrarlo despues de las actualizaciones.

Pagina de Login

En la pagina de “login” de nuestra instalación nos informa si el usuario o la contraseña es incorrecta debemos quitar o cambiar estos textos, para ello usaremos la siguiente función que añadiremos al archivo “function.php” de nuestro tema.

function inloop_login_error_message($error){
    return  "Incorrect username or password"; 
}
add_filter('login_errors','inloop_login_error_message');

Solo lo necesario

Los plugins como los temas tambien presentan vulnerabilidades, al editar nuestro “wp-config.php” hemos cambiado la ruta del directorio de “wp-content” por lo que dificultaremos el listado de los plugins y los temas. Solo deberiamos tener los archivos de los plugins y el tema que usemos, todo lo demas lo borraremos incluido plugin “Hello Dolly”.

Si intentamos visitar, por ejemplo “http://www.misitio.com/wp-settings.php” nos aparecera un error que generan los scripts PHP mostrando la ruta completa de la instalación. Hay muchos mas archivos que muestran el mismo error.
No solo no lo necesitamos sino que no lo queremos mostrar, para evitar esta vulnerabilidad es suficiente con editar el archivo “php.ini” y añadir la línea

display_errors = Off

Cada archivo con sus permisos

Nuestro servidor web posiblemente sea una máquina Linux, y en este sistema es muy importante tener cuidado con los permisos asignados tanto a los directorios como archivos. Para que funcione correctamente WordPress y no haya fallos de seguridad, lo ideal es que todos los directorios tengan el permiso 755 y los archivos el 644.

Apunte para comentarios

Si queremos quitarnos los enlaces de los comentarios podemos usar este filter en nuestro “function.php” que quitara las etiquetas html de los comentarios.

add_filter( 'pre_comment_content', 'wp_specialchars' );

Usa la cabeza:

Nunca uses temas o plugins premium o incluso los gratuitos descargados desde redes P2P o de las paginas no oficiales por ahorrarte unos euros, la inmensa mayoria incluye codigo inyectado que te dara problemas.

¿Donde puedo saber las vulnerabilidades de WordPress?

En WordPress.org, en el enlace “Return to Last Query” podemos ver todas las vulnerabilidades.

Instalando y configuración desde el panel de administración

Ya podemos entrar en nuestra URL “www.misitio.com” y hacer la instalación, por supuesto no usamos “admin” como usuario y usaremos una contraseña segura.

Añade tu correo y ya tenemos WordPress instalado, ahora accederemos a nuestro panel de administración y iremos a la pestaña de ajustes e iremos configurando todas las opciones.

  • Ajustes > Generales
    • Configurar bien el título y descripción.
    • Configurar bien el “reloj” (fecha, hora y formato de ambos).
    • Nadie se puede registrar
  • Ajustes > Escritura
    • Convertir emoticonos como :-) y :-P a gráficos en pantalla. ¿Hace falta? a mi no.
    • WordPress corregirá de forma automática el XHTML incorrectamente anidado.
  • Ajustes > Comentarios
    • Sin comentarios anidados
    • Sin paginacion en los comentarios
    • Sin avatares. (o cachear con plugin)
  • Ajustes > Enlaces permanentes
    • Nombre entrada necesitaremos acceso de escritura al archivo .htaccess

Ahora deberiamos crear un nuevo usuario con todos los permisos de administración y borraremos el usuario con el que hemos instalado o en su defecto cambiaremos el ID de la base de datos del usuario con el que hemos instalado WordPress o le cambiaremos los premisos de Administrador a Suscriptor, por que hay ataques dirigidos al usuario con el ID uno.

Consejos para contraseñas

  • Utiliza una contraseña única para tu cuenta.
  • Utiliza letras, números, símbolos y como mínimo ocho caracteres, doce recomendado
  • Cambia tu contraseña a menudo

Opciones de wp-config.php

Una vez subidos todos los archivos de WordPress en el servidor tenemos que editar el archivo wp-config-sample.php y crear el wp-config.php

  1. Información para conectarse a la base de datos, para completar estos datos antes teneis que crear una base de datos en vuestro hosting y recordar: No useis el prefijo por defecto.
    • define(DB_NAME, nombre_de_mi_bbdd);
    • define(DB_USER, usuario_de_mi_bbdd);
    • define(DB_PASSWORD, contraseña_de_mi_bbdd);
    • define(DB_HOST, mi_servidor_de_bbdd);
    • define(DB_CHARSET, utf8);
    • define(DB_COLLATE, );
    • $table_prefix = ‘prefijo_’;
  2. Ahora las claves secretas, las llaves protegen la sesión activa de WordPress la funcionalidad que brinda una mayor seguridad de manera indirecta para tus contraseñas y directa contra posibles ataques de robo de sesión.
    Aqui puedes auto-genera las claves

    • define(‘AUTH_KEY’, ‘miclave-knjhyujhjuytrfdesw’);
    • define(‘LOGGED_IN_KEY’, ‘miclave-knjhyujhjuytrfdesw’);
    • define(‘NONCE_KEY’, ‘miclave-knjhyujhjuytrfdesw’);
    • define(‘AUTH_SALT’, ‘miclave-knjhyujhjuytrfdesw’);
    • define(‘SECURE_AUTH_SALT’, ‘miclave-knjhyujhjuytrfdesw’);
    • define(‘LOGGED_IN_SALT’, ‘miclave-knjhyujhjuytrfdesw’);
    • define(‘NONCE_SALT’, ‘miclave-knjhyujhjuytrfdesw’);
  3. Ya tenemos lo basico. Ya podemos acceder a la URL de nuestro sitio e instalar pero podemos seguir configurando nuestra instalación.
    • define(WPLANG, es_ES); -> Define el idioma de nuestro wordpress, el tema y los plugins usaran este idioma si tiene los archivos de traducción.
    • define(WP_CACHE, true); -> Activamos las opciones se habilita el script wp-content/advanced-cache.php. Sera necesio si queremos usar algun pluging de Cache
    • define(WP_POST_REVISIONS, false); -> Desactivamos la revisión de los post para que no haga tantas entradas en la base de datos
    • define(AUTOSAVE_INTERVAL,300); -> Aumentamos a 5 minutos el intervalos que autoguarda los post mientras estamos editandoles.
    • define(COOKIE_DOMAIN, misitio.com); -> Definimos el dominio de las Cookies
    • define(WP_SITEURL, http://www.misitio.com); -> Definimos la url de nuestro sitio
    • define(WP_HOME, http://www.misitio.com); -> Definimos la home de nuestro sitio
    • define(‘NOBLOGREDIRECT’, ‘http://www.misitio.com/pagina_de_no_encontrado’); -> Definimos una pagina cuando no existe la pagina buscada.
    • define(‘EMPTY_TRASH_DAYS’, 1 ); -> Definimos en un dia el tiempo en el que se vacia la papelera
    • define( ‘WP_CONTENT_DIR’, dirname(__FILE__) . ‘/blog/wp-content’ ); -> Definimos el directorio de wp-content de nuestra instalación, cambiado la ruta por defecto. Puede ser que algun plugin que no este bien escrito no lo soporte.
    • define( ‘WP_CONTENT_URL’, ‘http://www.misitio.com/blog/wp-content’ ); -> Definimos la URL de wp-content de nuestro sitio.
    • define(‘DISALLOW_FILE_EDIT’,true); -> Desactivamos el editor del tema y de los plugins, si lo necesitaramos siempre prodriamos volver a activarlo.

Es recomendable, por seguridad frente a ataques masivos a instalaciones de WordPress, que cambiemos las opciones por defecto.

Mas información sobre el archivo wp-config.php en el codex de wordpress

Ahora deberemos crear el archivo .htaccess en la raiz de nuestra instalación y para proteger los archivos añadimos estas lineas:

order allow,deny
deny from all

De momento no debemos preocuparnos por el archivo “.htaccess” ya que mas adelante profundizaremos mas en el.

Instalando WordPress

La famosa Instalación en 5 minutos esta bien para probar el CMS pero ¿es suficiente para tener nuestro sitio en internet?

Yo creo que no, tras acabar los 7 de la instalación debemos configurarlo, para hacerlo mas seguro.

Lo que vamos a pretender es mejorar, optimizar y asegurar nuestra instalación. Lo primero que vamos a hacer es crear una base de datos en nuestro hosting y subir los archivos a nuestro servidor, generalmente por FTP. Dedicale un minuto a pensar un buen nombre de usuario y contraseña que sea segura. Ya lo tenemos, pues empecemos: