Siempre decimos que uno de los básicos a la hora de asegurar tu sitio es no dar información gratis y ¿qué información da WordPress gratis a los posibles hackers?, pues en la versión actual solo el número de versión, incluido en el fichero readme.txt de tu instalación y, acuérdate, el prefijo de la base de datos, que por defecto viene marcado a «wp_» en el fichero ‘wp-config.php
‘ creado en la instalación a partir de ‘wp-config-sample.php
‘.
Eliminar el fichero readme.txt
puedes hacerlo en cualquier momento pero ¿y si no te acordaste de cambiar el prefijo de la base de datos en el momento de la instalación?, ¿puedes hacerlo ahora? …
Pues si, no solo puedes sino que debes hacerlo. Cuando un hacker trate de atacar tu sitio mediante una injección SQL lo primero que va a hacer es comprobar su las tablas de tu base de datos empiezan por ‘wp_’ pues los nombres de las tablas de WordPress son de sobra conocidas (wp_options, wp_posts, wp_comments, etc).
Bueno, no sufras, vamos a cambiar el prefijo ahora mismo, solo necesitas acceso al fichero ‘wp-config.php
‘ para editarlo y a phpMyAdmin, algo habitual desde el panel de tu alojamiento, no vamos a tardar más de 10 minutos.
¡Ah!, y como siempre, antes haz copia de la base de datos, eso que no se te olvide por si metes la pata en algún paso.
Nota preliminar: este proceso es para instalaciones ya finalizadas, si aún no has instalado WordPress al hacerlo te pedirá un prefijo para la base de datos, simplemente elige uno poco predecible.
Índice de contenidos
1. Modifica el archivo wp-config.php
Busca la sección que dice esto:
/** * Prefijo de la base de datos de WordPress. * * Cambia el prefijo si deseas instalar multiples blogs en una sola base de datos. * Emplea solo números, letras y guión bajo. */ $table_prefix = 'wp_';
Aquí es donde vamos al cambiar el prefijo, y lo ideal es usar una cadena que sea difícil de identificar, cuanto más mejor, por ejemplo ‘JUJp4ExX651j’. Asi que sustituimos el predecible ‘_wp’ por esto:
/** * Prefijo de la base de datos de WordPress. * * Cambia el prefijo si deseas instalar multiples blogs en una sola base de datos. * Emplea solo números, letras y guión bajo. */ $table_prefix = 'JUJp4ExX651j_';
2. Cambiamos los nombres de las tablas de la base de datos
Como en el paso anterior hemos dicho a WordPress que el prefijo de las tablas es distinto al que tienen las existentes no te sorprendas si al acceder a tu sitio te da error, ¡es lo normal!, lo raro sería lo contrario.
Cuando instalas WordPress se añaden nada menos que 11 tablas estándar por defecto en tu base de datos. Luego, si instalas plugins, incluso con algunos temas, la lista va creciendo. Acede a phpMyAdmin y revisa en la lista de la izquierda la lista de tablas de tu base de datos y verás, por lo menos, las 11 originales (aunque seguro que verás más).
Bueno, pues como ya estamos dentro de phpMyAdin elegimos la pestaña SQL y luego el comando RENAME para renombrar rápidamente las tablas de nuestra base de datos, que es lo que toca ahora.
Con los siguientes comandos renombramos las 11 tablas originales de WordPress, recuerda que si tienes más tablas tendrás que añadir una línea similar por cada una adicional ¿entendido?.
Vamos a ello, ejecuta el comando de abajo, solo cambiando el prefijo que yo he puesto aquí al azar por el que tu hayas elegido en el paso anterior.:
RENAME table `wp_commentmeta` TO `JUJp4ExX651j_commentmeta`; RENAME table `wp_comments` TO `JUJp4ExX651j_comments`; RENAME table `wp_links` TO `JUJp4ExX651j_links`; RENAME table `wp_options` TO `JUJp4ExX651j_options`; RENAME table `wp_postmeta` TO `JUJp4ExX651j_postmeta`; RENAME table `wp_posts` TO `JUJp4ExX651j_posts`; RENAME table `wp_terms` TO `JUJp4ExX651j_terms`; RENAME table `wp_term_relationships` TO `JUJp4ExX651j_term_relationships`; RENAME table `wp_term_taxonomy` TO `JUJp4ExX651j_term_taxonomy`; RENAME table `wp_usermeta` TO `JUJp4ExX651j_usermeta`; RENAME table `wp_users` TO `JUJp4ExX651j_users`;
Luego le das a ‘Go’ y tus tablas quedan renombradas de golpe, ya casi hemos terminado.
3. Modifica la tabla wp_options
La tabla ‘wp_options
‘ contiene por lo menos un valor que hace referencia a los viejos prefijos de tabla así que hay que cambiarlo. De nuevo ejecutaremos un comando SQL que nos muestre todos los valores de esta tabla que contengan los nombres viejos.
Vamos de nuevo a la pestaña SQL y en la parte superior introducimos lo siguiente, de nuevo cambiando mi cadena aleatoria por la tuya.:
SELECT * FROM `JUJp4ExX651j_options` WHERE `option_name` LIKE '%wp_%'
Cuando veas los resultados edita el ‘option_name
‘ para cambiar ‘wp
‘ a la cadena que elegiste. O sea, que si uno de los ‘option_names
‘ es, por ejemplo, ‘wp_user_roles
‘, lo cambias a ‘JUJp4ExX651j_user_roles
‘, para que haga la referencia a los nuevos nombres de tablas.
¡Venga, que ya terminamos!
4. Modifica la tabla wp_usermeta
Al igual que antes, también en esta tabla hay referencias a «lo antiguo» así que de nuevo hay que ejecutar un comando para terminar el proceso, así que tecleamos lo siguiente para saber lo que nos toca cambiar:
SELECT * FROM `JUJp4ExX651j_usermeta` WHERE `meta_key` LIKE '%wp_%'
Ahora lo que toca es cambiar el ‘meta_key
‘ de cada resultado para que tenga nuestra cadena «anti-hackers».
¡Ea ya está!. Ya puedes ir al Escritorio de tu WordPress para comprobar que todo funcione y sabiendo que estás un poco más seguro ante inyecciones SQL.
Nota final: de nuevo, y como en cada ocasión que realices modificaciones en tu WordPress, te recuerdo que hagas copia de seguridad de la base de datos antes de cambiar nada, luego no vengas quejándote.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Yo en mi blog utilicé el plugin, para hacer esto, utilicé WP Security Scan. Tiene una herramienta que permite hacer el cambio de prefijo de la base de datos de forma automática. Aparte, también sirve para comprobar la seguridad en otros aspectos, como que el usuario root no se llame "admin", o que la versión de WordPress permanezca oculta.
Me gustaría saber como lo hiciste porque yo lo he intentado también con WP Security Scan pero sale el siguiente error: ""Your User which is used to access your Wordpress Tables/Database, hasn't enough rights( is missing ALTER-right) to alter your Tablestructure. Please visit the plugin documentation for more information. If you believe you have alter rights, please contact the plugin author for assistance."" Que puedo hacer para solucionar esto 🙁
Bueno, en este caso el mensaje de error es bastante autoexplicativo. Indica que el usuario de la base de datos no tiene permisos suficientes para hacer las modificaciones necesarias. Para arreglarlo tendrás que otorgarle permisos para alterar las tablas (el permiso se llama ALTER, como se indica en el mensaje de error). Esto se puede hacer desde phpMyAdmin, seleccionando la base de datos de WordPress, buscando el usuario de la instalación de WordPress y modificando los permisos que tiene asignados.
Pues busque el ususario pero no encuentro nada que se llame ALTER o algo parecido. Que estare hacienbdo mal los busque por xxxx_user y xxxx_user_meta.
Voy a tratar de explicarlo paso por paso, pero la verdad es que estas cosas no se me dan nada bien.
– Lo primero que debes hacer es acceder a phpMyAdmin.
– Dentro de phpMyAdmin, debes seleccionar la base de datos de tu instalación de WordPress.
– Una vez seleccionada la base de datos, selecciona la pestaña "Privilegios". Obtendrás un listado de los usuarios con acceso a la base de datos seleccionada.
– El usuario que nos interesa es aquel que hayas indicado durante la instalación de WordPress que será el usuario principal de la base de datos. Si no te acuerdas de cuál es, puedes consultarlo en el archivo wp-config.php, que estará en la raíz de tu instalación de WordPress.
– Una vez tengas identificado el usuario, pulsa en el icono que aparece en la columna "Acción", en la fila que corresponda a ese usuario.
– Te saldrá un listado con todos los permisos que puedes asignar al usuario. En la sección "Estructura", tendrás que marcar el permisso necesario para que WP Security Scan realice automáticamente el cambio de prefijo de todas las tablas, es decir, tendrás que marcar la casilla ALTER.
– Guarda los cambios pulsando "Continuar", y listo, WP Security Scan ya podrá cambiar los prefijos de las tablas.
Saludos.
Gracias por tu valiosa ayuda pero ahora me surgió otro problema y es que no tengo la pestaña privilegios, porque no lo se… mira aquí te dejo una imagen.
http://www.subeimagenes.net/images/715phpmyadmin.jpg
Y yo se que tu estas en lo cierto porque después de mucho buscar encontré algo muy similar a lo que tu me decías.
Gracias nuevamente por brindarme tu ayuda y tu tiempo, te lo agradesco en verdad.
Hola
Yo cuando lo ejecuto me lo hace sin problemas pero luego me deja capada media administracion, no puedo acceder al propio plugin, ni a los ajustes ni a un monton de cosas. He tenido que restaurar la copia de seguridad para que me aparezca todo de nuevo.
Salu2
Parece un poco tedioso en un prinicipio, pero si te tomas el tiempo necesario, y soguiendo los consejos de Fernando y el sentido común, la base de datos y la página quedan un poco más seguras. Gracias por el tuto, Fernando. 🙂
Tengo el hosting en Dreamhost y ellos (con sus "oneclic installs") ya se encargan de eso. Dejan el prefijo wp_ pero antes de identificar cada tabla generan una clave alfanumerica aleatoria… por ejemplo wp_a172R3_posts
Creo que con eso tb aseguro la seguridad jeje
Excelente, todo muy bien hasta el paso 4. Modifica la tabla wp_usermeta, pero aquí que???? si tengo 1.000 usuarios tengo que modificar celda por celda, eso seria eterno, hay una forma de modificar esto mas rápido??? como??? Les agradecería si me dan una mano con esto.
Tienes que ejecutar un replace en la base de datos si tienes mucho
Y como se haría esto, te agradecería si me lo dijeses. Es que no se nada de MySQL
Hola
Me pasa lo mismo podrias decirnos como montar el replace?? Por otro lado en este lado me aparecen tablas tipo bbp_wp_usermeta (la tabla en cuestion me la he inventado, pero de ese tipo que el wp no esta al principio. Estas tambien habria que cambiarlas?
Salu2
Por favor quiero que me ayude, yo estaba cambiando el prefijo wp_ en mi base de datos de sql y cuando cambie todo al pie de la letra como explicas en tu excelente articulo, voy a revisar mi wordpress y cuando chequeo me dice que debo de instarlar wordpress, no me dejaba entrar hasta que tuve que intalar a wordpress de nuevo, y cuando entreo esta como si estuviera nuevo, no tiene nada de lo que tenia, pero hice una compia de seguridad antes de hacer esto y tambien despues de modificar el prefijo en la base de datos, ahora mi pagina se callo, quiero saber si puedo revivir mi wordpress con la copia de seguridad de la base de datos que hice, por favor explicame si puedo hacerlo, enviame un correo aqui mismo por favor..
Hola
Arroja este error.!!
SELECT * FROM `JUJp4ExX651j_usermeta` WHERE `meta_key` LIKE ‘%wp_%’ ahora no puedo ingresar!!!Slds.
Hola Arroja este error.!! WHERE `meta_key` LIKE ‘ % wp_ % ’LIMIT 0 , 30 MySQL ha dicho: #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '% wp_ % ’ LIMIT 0, 30' at line 1 Ahora ni siquiera puedo ingresar al escritorio !!!! Que mal.Slds.
¿No hiciste backup de la base de datos?
Sí. He restaurado todo. Gracias igual. Super bueno el blog!. Slds.
Parece muy útil este consejo, pero les pido mejoren el traductor al español. No se entiende, es muy confuso. Gracias
Emmm… ¿Cómo quieres traducir las consultas SQL?
muchas gracias me han ayudado muchísimo, llevaba casi una semana sin lograr solucionar el problema.
Pues he hecho todo al pie de la letra y me sale este error: "Error estableciendo una conexión con la base de datos", y si intento volver atras, no importa, con backup de todo y todo, me sale el mismo error…
Está PERFECTO, lo hice todo paso por paso y por fin pude implementar una medida de seguridad básica en mi web.
Lamentablamente recibimos 2 ataques informáticos bastante duros esta última semana, están denunciados a las autoridades pero nos está ‘rascar’ de varias webs las claves para mejorar nuestra seguridad.
Poco estamos pudiendo hacer ya que al arreglar los errores los hackers vuelven a modificarnos las platillas y demás…son muy persistentes, pero tenemos claro que no van a dedicar más tiempo que nosotros a nuestra web. Millones de gracias por todo esto!
:O muchas gracias me funcionó ala perfección gracias fernanado 😀
lo del readme vale tambien para el .html?? o solo para el txt??
Es mas tambien seria aplicable a los archivos de license.txt o licencia.txt no?
Luego de 2 años y medio estoy cambiando de cero la instalación principal de mi sitio y quiero hacerlo muy bien desde cero. Al principio tuve problemas, pues se me pasó renombrar una opción en wp_options, pero ya está corregido así que continuamos con el trabajo.
Gracias, Fernando
Hola, Excelente. Lo he realizado al pie de la letra y me ha funcionado PERFECTO. Saludos Fernando!!
Saludos a todos, excelente post! me ha sido de mucha ayuda… yo descargue de la Base se Datos (con la accion «exportar» de MySQL) los archivos comprimidos en .zip de: «wp_options.sql» y «wp_usermeta.sql» luego los abri con el programa Dreamweaver y aplique la opcion: «Buscar y Reemplazar» de esta forma reemplaza en una sola acción el prefijo «wp_» por el de su preferencia. Luego en MySQL eliminas dichas tablas y luego aplicas la opcion: Importar «wp_options.sql» y «wp_usermeta.sql» ya modificados.
Buenas tardes, las modificaciones a la tabla nuevoprefijo_options y nuevoprefijo_usermeta solo son a los option name y meta_key que comiencen con wp_, pq hay algunos como dismissed_wp_pointers, dismissed_wp_pointers, entiendo por el select que al incluir el % al principio habrá que modificar el nombre a estos campos pero no estoy muy seguro, pero es que también se muestra wpseo_metadesc y _yoast_wpseo_profile_updated. O al final solo a las que comiencen con wp_. Un saludo.
Hola, donde ubico el archivo readme.txt, lo he buscado por todo el public_html, pero sólo he encontrado un archivo readme.html… puede ser ese?,… gracias
Consulta, al editar las tablas wp_options y wp_usermeta, aparecen varias
opciones con wp delante del nombre, muchas de ellas no llevan el
«_»… en esas opciones también hay que cambiar el «wp» por el nuevo
nombre del prefijo?
Super útil 🙂
Thanks Man!!! Me salvaste. La única observación que voy a hacerte, y que ojalá corrijas en tu post para que no le pase a más personas, es que el prefijo tiene que ser en minúsculas. Yo estaba migrando de localhost al servidor con duplicator y luego de terminar el proceso de duplicator el sitio no funcionaba, me mandaba al link de wp-admin/install.php como a instalar todo de cero. Leí que alguien habia tenido el mismo problema y que se debía al que el prefijo tenia una mayúscula. Cambié el prefijo de mi wp-config, en la base de datos automáticamente estos ya estaban en minúsculas, con eso el sitio se podía ver pero me negaba el acceso al admin, problema que se resolvió siguiendo las indicaciones de este post!!.
Dejo como referencia los otros links que utilicé, sin buenos resultados, pero que me ayudaron a llegar aquí:
http://stackoverflow.com/questions/9827164/wordpress-keeps-redirecting-to-install-php-after-migration
https://es.wordpress.org/support/topic/wordpress-no-me-permite-acceder-a-wp-admin/
bua en el user meta me toco cambiarlo de un montón de filas me daba error en la búsqueda no se porque con like ……… igual ya esta creo y funciono solo que toco hacerlo seleccionando las lineas y despues pegue y pegue …… creo que ya esta despues vi lo del pluguin jajajjajaaaj por fin owasp listo y los 15 trucos seguridad también